sou*_*eck 13 javascript internet-explorer jscript
我知道这种形式:
var foo = function bar() {};
Run Code Online (Sandbox Code Playgroud)
将bar名称泄漏到封闭范围并创建两个函数jscript.
怎么样:
var foo = function foo() {};
Run Code Online (Sandbox Code Playgroud)
?
它仍然将名称泄漏到封闭范围,但无论如何它都在那里(thx to var foo).
我知道它将在整个范围内定义,但它会创建两个函数并立即取消引用/销毁其中一个或者这仍然导致泄漏吗?
在这种情况下:
var bar = function() {
foo();
var foo = function foo() {};
}
Run Code Online (Sandbox Code Playgroud)
我们里面会有两个函数对象bar()吗?
编辑
好吧,它肯定会创建两个函数对象,现在的问题是:命名定义创建的函数是否var foo在行之后被GC解除引用并清除,因此foo在上面的代码中,任何时刻都只有一个"实时" 实例?
或IE将IE永远悬空,因为没有办法"解除引用" foo定义创建的内容,它甚至不应该首先出现在那里?
解析语句时var foo = function foo() {};,var foo声明很可能是在执行后赋值的。 function foo(){}
这意味着function foo将在全局范围内定义,这是通常的window,首先。
之后,被分配并因此从您的名称范围中var foo隐藏。因此,事实上,您的代码定义了or ,如果您当前的作用域被保留,则它不会被垃圾回收。window.foofoowindow.foowindow.bar
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |