关于闭包的一个有意思的地方

地狱羔羊 2013-07-04 03:47:41

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: Window



function 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: Window



function 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,如果要通过闭包调用函数外部变量,函数内不能定义相同变量名。因为如果定义了,闭包将不存在了。
...全文
166 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnvlyp 2013-07-05
  • 打赏
  • 举报
回复
嗯。。第三个有点意思。。
cstbuctlz 2013-07-05
  • 打赏
  • 举报
回复
小伙写代码 2013-07-04
  • 打赏
  • 举报
回复
挺有意思~ 有点类似于this?

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧