基本语法
语句:
var a = 1 + 2;
这条语句先用var命令,声明了变量a,然后将1 + 2的运算结果赋值给变量a。其中1+2是表达式(expression)。一般用;
号进行语句结束
变量,常量
变量就是对值的一种引用。使用变量之前一定要变量声明var;let
,如var a = 1 + 2;
其中a是变量 1 和 2都是常量。
标识符
标识符(identifier)是用来识别具体对象的一个名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。其中有一些重要规则。
第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字0-9。
数据类型
数值(number):整数和小数(比如1和3.14)
字符串(string):字符组成的文本(比如”Hello World”)
布尔值(boolean):
true
(真)和false
(假)两个特定值。短路逻辑。undefined
:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值,没有赋值的基本对象。null
:表示无值,即此处的值就是“无”的状态。没有赋值的对象。对象(object):各种值组成的集合
Symbol
对象(object)又有三个子类型:狭义的对象(object),数组(array),函数(function)
六种假值:false,0,''或者" ",NaN,undefined,null
其中console.log()任何值返回的都是undefined
运算符
运算符优先级顺序:
- ()
- ,
- =
函数(function)
每次调用函数都会有result=fcuntion xxx .call(this,[arguments]),this默认是window,arguments是一个为数组对象 ,函数里都有return.
result=fcuntion xxx .call(this,[arguments]){
return undefined //return默认 undefined
}
函数作用域
作用域有就近原则由下往上,声明变量会被提前
浏览器
浏览器给我门提供了window和document API
主要分为两大类BOM 和 DOM
var 与 let 区别
var 是函数作用域的变量,可以同一作用域重复覆盖声明变量
let 是块级作用域变量,且同一个作用域不会重复声明变量
let 与for语句一起使用的时候会在for块级作用域里添加一个与圆括号相等的let声明
let 有死亡区域是声明之前不允许使用let变量
浏览器第一次阅览代码只看声明 function和var,let
let高级理解
var a =1
function f1(){
// 实际浏览器阅读第一次代码会把var a 放在这里
if(true){
}else{
var a = 2 // a= 2 保留在这里
}
console.log(a)
}
f1() //undefined
------------------分割线------------------------
var a =1
function f1(){
if(true){
}else{
let a = 2 //let a 则还在这里
}
console.log(a)
}
f1() //1
------------------分割线------------------------
var a =1
let a =2 //error
------------------分割线------------------------
for(let i=1;i<6;i++){ //在花括号内侧会自动添加一个匿名与圆括号相等的 let i=圆括号let i
setTimeout(function(){
console.log(i)
},1000)
} //0,1,2,3,4,5
------------------分割线------------------------
let a =1
{
console.log(a)
let a = 2
} //error 虽然let a 提升到block第一行但是在a=2之前如果调用a则报错
setTimeout与setInterval方法的区别:
setTimeout(a(),500),在500毫秒后只执行1次方法a(),而setInterval(a(),500)是每隔500秒执行一次
方法a()。也就是说如果不把前者放在循环里,就不能实现后者的循环功能。