function Student(name){
var name = name || window;
this.getName=function(){
return name
}
}
var lilei=new Student("李雷");
lilei.getName();//"李雷"
console.dir(lilei.getName);
//可以看到<function scope>
// Closure
// name: "李雷"
// Global: Windowfunction Student(name){
var name = name || window;
this.getName=function(){
return "11";
}
}
var lilei=new Student("李雷");
lilei.getName();//"11"
console.dir(lilei.getName);
//可以看到<function scope>
// Global: Windowfunction Student(name){
this.getName=function(){
var name = name || window;
return name
}
}
var lilei=new Student("李雷");
lilei.getName();//window
console.dir(lilei.getName);
//可以看到<function scope>
// Global: Window
我知道js编译器会先定义好所有的变量,然后赋值,例如上面的,var name = name || window;会变成
var name;
name = name || window;
从上面的现象,得到简单结论:
1,形参是在所有变量定义前就定义好,并赋值的var name;对于已经存在的变量name是没影响的。
2,闭包是在JS引擎检测到函数依赖外部变量时,注入到函数的作用域中的。
3,如果要通过闭包调用函数外部变量,函数内不能定义相同变量名。因为如果定义了,闭包将不存在了。闭包JavaScript引擎编译器作用域
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货