JavaScript ES语法学习笔记(一)

作用域(全局、局部、块、动态)

全局
1
2
3
4
5
6
var abc=1234    //当全局变量用
abcd=2345      //不加var声明,则当windows对象的全局属性

function test(){
    ab=45     //这里的ab也是挂在windows对象的全局属性  
}
局部
1
2
3
4
5
6
7
8
9
围墙外
function test(){------函数相当于围墙
    var a=3    //a是局部作用域,{}外不能获取到
    return a+4  //函数外获取a
                   //第一种方法:通过return向外传递值
                  //第二种方法,通过闭包的方式
}
console.log(test())
console.log(a)

闭包的实例

1
2
3
4
5
6
7
function test(){
    var a=3
    function test2(){
        var b=4
        return a+b   //a作用域在test()中共享的,在test2()中也能访问到,层层向上找---作用域链
    }
}
块级

ES6新增块级作用域—–let
现在{}内的变量外部无法访问,ES6之前是层层向上查找

动态作用域
1
2
3
4
5
6
7
window.a=3
function test(){
    console.log(this.a)----this的作用域是动态的
}
test()    //   输出3
test.bind({a:100})()   //bind让函数动态绑定一个对象
                       //输出100

let 与 var 区别

1
2
3
4
5
6
7
8
var b=3
let c=4
console.log(window.b,window.c)  //第一个能输出,第二个不能输出

var b=4
console.log(b)  //不影响输出修改
let c=5
console.log(c)  //报错,不能重复定义

const:let有的特性他都有,除此之外只能定义常量
const不能先声明,在赋值

知识点总结:作用域范围 重复定义 初始化 变量提升
0%