关于在函数外访问函数内的变量
时间:2011-11-29
来源:互联网
JScript code
function Person(name, age, job) { var o = new Object(); o.sayName = function() { window.alert(name); } return o; } var p = Person("hzt", 26, "Programmer"); p.sayName(); //1、这里已经跳出了Person,为什么还能访问name? //2、是不是形成闭包了? //3、变量name和age、job何时会被垃圾收集器回收?
作者: hztgcl1986 发布时间: 2011-11-29
p.sayName();
//1、这里已经跳出了Person,为什么还能访问name?
没有跳出吧。
//1、这里已经跳出了Person,为什么还能访问name?
没有跳出吧。
作者: licip 发布时间: 2011-11-29
1、这里已经跳出了Person,为什么还能访问name?
静态作用域是在函数定义的时候创建的
2、是不是形成闭包了?
是
3、变量name和age、job何时会被垃圾收集器回收?
没有引用的时候就会被垃圾回收
静态作用域是在函数定义的时候创建的
2、是不是形成闭包了?
是
3、变量name和age、job何时会被垃圾收集器回收?
没有引用的时候就会被垃圾回收
作者: liangws 发布时间: 2011-11-29
顶2楼,刚才我也专门试了一次。
1.那个name应该是静态的。
2.不太了解闭包的概念,不过那个name确实是不能改动的了
3.js应该是按照堆栈的方式对数据进行处理的,如果变量失去了作用域,就会被回收
1.那个name应该是静态的。
2.不太了解闭包的概念,不过那个name确实是不能改动的了
3.js应该是按照堆栈的方式对数据进行处理的,如果变量失去了作用域,就会被回收
作者: yusongkun 发布时间: 2011-11-29
JS的作用域是静态的,当定义一个function时,function的作用域是定义function时所在的作用域,而不是调用function时所在的作用域。
当调用一个function时,就会创建一个新的作用域,在这个作用域中用var定义的变量就是局部变量,一般情况下function执行结束之后这个调用时所创建的作用域就会被系统回收。
在function圈套定义时,如果里面定义的function被保存了下来(如:赋给一个全局变量)。那么它所在的作用域(调用外面function时所创建的作用域)也必须一起保存下来(也就是说外面function执行结束时这个调用时所创建的作用域不会被系统回收,要等到保存下来的function被系统回收时系统一起回收)。
作用域保存下来在这个作用域中的所有局部变量当然也都保存了下来。
详细出处参考:http://www.jb51.net/article/5603.htm
当调用一个function时,就会创建一个新的作用域,在这个作用域中用var定义的变量就是局部变量,一般情况下function执行结束之后这个调用时所创建的作用域就会被系统回收。
在function圈套定义时,如果里面定义的function被保存了下来(如:赋给一个全局变量)。那么它所在的作用域(调用外面function时所创建的作用域)也必须一起保存下来(也就是说外面function执行结束时这个调用时所创建的作用域不会被系统回收,要等到保存下来的function被系统回收时系统一起回收)。
作用域保存下来在这个作用域中的所有局部变量当然也都保存了下来。
详细出处参考:http://www.jb51.net/article/5603.htm
作者: Legend1988 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28