Javascript中对象和闭包的有趣和奇怪的行为
Interesting and strange behaviour of objects and closure in Javascript
参见代码
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
}
(function()
{
var b = 8;
}
());
</script>
我不是在创建 a 的对象,也没有调用 hello()。但是我被调用了hello()。
当我删除闭包时,该函数不会自动调用。即。为
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
}
</script>
这种奇怪行为的原因是什么?
http://jsfiddle.net/6yc9r/
和
http://jsfiddle.net/6yc9r/1/
通过省略分号,您意外调用了 hello() 函数。这就是为什么使用分号的原因,即使JS引擎的自动分号插入功能使它们看起来没有必要!试试这个:
<script type = 'text/javascript'>
function a()
{
;
}
a.prototype.hello = function()
{
alert('hello');
};
(function()
{
var b = 8;
}
());
</script>
原因是您缺少;
。
由于函数表达式和下一行的(
之间没有分号,因此第二个函数将成为第一个函数的参数,如下所示:
a.prototype.hello = function()
{
alert('hello');
}(function() { ... }());
相关文章:
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- Javascript.闭包和dynamic'这'实际上具有约束力
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 就良好实践而言,带闭包的javascript原型是一件好事吗
- 闭包中的Javascript值
- 用于添加两个数字的javascript闭包的用法
- 什么'这个javascript闭包的区别是什么
- javascript,将参数传递给函数内部的闭包中的回调
- javascript中的闭包对我来说工作方式不同
- 我可以使用JavaScript闭包添加数字吗
- 在Javascript中使用闭包
- 这是在JavaScript中形成闭包的正确方法吗
- 作用域问题-此函数是否形成闭包-JavaScript
- JavaScript - 为什么这个闭包不保存参数
- javascript闭包:保护内部变量
- 如何测试只在闭包范围中可见的javascript方法
- JavaScript闭包&回调函数
- 闭包 JavaScript 有助于理解示例