函数与闭包

let x="x"
let a="1"
const f1=(x)=>{
return x+a
}
{
let a="2"
f1("x") // 值是多少
}

答案为 "x1".
因为a不是参数,a是环境env。再函数定义是a的值已经确定。

js中 函数里面可以访问函数外面的变量!!!

var a=10; function test(){ a=5; alert(a); alert(this.a); var a; alert(this.a); alert(a); }
test() // 5 10 10 5
new test() // 5 undefined undefined 5

class Foo {
print = () => {
console.log(this.x);
}

constructor() {
    this.x = 1;
}

}

let foo = new Foo();
foo.print.call({x: 2}); // 1

this可以看做一个特殊隐形的参数。当函数被调用时会被传入到函数中去。
有两种情况。
一种是直接调用。比如fn() 它相当于 fn.call(Window)
一种是间接调用。比如 obj.fn() 它相当于fn.call(obj)
特别注意箭头函数没有this的说法。所以箭头函数被调用的时候直接去找它函数定义的时候的this.

你可能感兴趣的:(函数与闭包)