gpt4 book ai didi

javascript - 在 IE8 中非常奇怪的事情。定义的变量被识别为 'undefined'

转载 作者:行者123 更新时间:2023-11-30 07:28:05 24 4
gpt4 key购买 nike

当我尝试启用一个库 (Beard.js) 以支持 javascript 模板引擎 Haml 时,出现了一个非常奇怪的问题。

无法正确加载 Haml。我追踪代码,发现 Haml 从未加载到页面中。经过多次尝试和失败后,我碰巧让它工作了。我发现的奇怪的事情是:

在原始 Haml 库中,它是:

var Haml;

(function(){
...

Haml = function(){ ... }

...
}());

我将代码更改为:

var Haml;

(function(){
...

window.Haml = function(){ ... }

...
}());

然后就可以了..

为什么???难道 Haml 不应该被自动识别为在全局范围内定义的吗?

环境 - IE8
Haml.js - https://github.com/creationix/haml-js
Bear.js - https://github.com/jspopisno1/Beard

------------更新----------------

在 Haml.js 中,它是:

var Haml;

(function(){
...

Haml = function Haml(){ ... }

...
}());

我猜在 javascript 中,语句“function Haml(){}”使 Haml 成为局部变量。但是,为什么Haml在Firefox&Chrome中可以正确加载????

最佳答案

此问题与 JScript(在 IE8 之前的版本中)有一个错误有关,即 命名函数表达式 会泄漏到封闭范围中。如此命名的函数表达式被解析为函数声明(以及函数表达式),从而自动将本地 Haml 变量提升到本地范围。之后,您设置 Haml = function(){} 但这不会导致全局 Haml,因为 JScript 找到了一个 local 变量该标识符,因为它错误地泄漏到本地范围。因此,虽然本地 Haml 设置正确,但永远不会到达全局的。

您可以阅读更多 here .

关于javascript - 在 IE8 中非常奇怪的事情。定义的变量被识别为 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com