Hi, 请直接看待码!<script>
function Person (name, age) {
this.name = name;
this.age = age; if (!this.sayName) {
arguments.callee.prototype.sayName = function() {
var ok = this.name + ':' + this.age;
// var ok = name + ':' + age;
alert(ok);
}
}
}
a = new Person('aaa', 111);
b = new Person('bbb', 222);
a.sayName();
b.sayName();
</script>说明:
1, Person 中 if 判断只会在第一次调用构造函数时执行.
2, 创建 sayName 对应的匿名函数时, 匿名函数的 [[scrope]] 属性保存了 Person 的活动对象(变量对象).基于以上两点得出:
第一次调用 Person 时创建了闭包, 只要有对 Person(这个函数) 的引用, 这个变量对象就不能释放;因此问题来了:
但是我用 开发工具 设置断点, 然后 Watch Expressions 设置观察 obj 这个变量, 但是显示未定义.
如果 Person 第一次调用的变量对象没有释放, 那么就应该可以观察到 obj. 这个地方怎么观察不到 obj, 难道 js 引擎在创建函数时(形成函数的 [[Scope]] 属性时)会做优化?释放不会用到的变量(上面例子中的 obj)?谢谢各位大侠!
function Person (name, age) {
this.name = name;
this.age = age; if (!this.sayName) {
arguments.callee.prototype.sayName = function() {
var ok = this.name + ':' + this.age;
// var ok = name + ':' + age;
alert(ok);
}
}
}
a = new Person('aaa', 111);
b = new Person('bbb', 222);
a.sayName();
b.sayName();
</script>说明:
1, Person 中 if 判断只会在第一次调用构造函数时执行.
2, 创建 sayName 对应的匿名函数时, 匿名函数的 [[scrope]] 属性保存了 Person 的活动对象(变量对象).基于以上两点得出:
第一次调用 Person 时创建了闭包, 只要有对 Person(这个函数) 的引用, 这个变量对象就不能释放;因此问题来了:
但是我用 开发工具 设置断点, 然后 Watch Expressions 设置观察 obj 这个变量, 但是显示未定义.
如果 Person 第一次调用的变量对象没有释放, 那么就应该可以观察到 obj. 这个地方怎么观察不到 obj, 难道 js 引擎在创建函数时(形成函数的 [[Scope]] 属性时)会做优化?释放不会用到的变量(上面例子中的 obj)?谢谢各位大侠!
解决方案 »
- jquery easyui 单独文件使用(没有使用过的不要进来)
- 为什么我用JS写的onmousedown事件无法移动?!
- 请教关于阻止事件冒泡的问题
- 在一个div里设置属性style="display:none" 为什么js就获取不到文本框里的值
- 如何使用JavaScript的正则表达式获取处于指定字符串开始以及指定字符串结尾的中间内容
- js里面的变量值可以传出来么?最好给asp
- JavaScript脚本,运行过程中出现“脚本大量运行,可能使浏览器速度变慢“的提示
- 在JS中,如何将判断某个值中是否含有特定的字串?
- eval 我觉得可以呀
- 高分求助!js可以实现随机读取一目录下的图片文件吗?
- 击球一句话代码
- jquery ui dialog 返回值问题
http://jsfiddle.net/WSjWX/
obj 这个变量指的什么?
请问:
js 引擎在创建函数时(形成函数的 [[Scope]] 属性时)会做优化?