gpt4 book ai didi

node.js - Javascript命名函数表达式,引用错误

转载 作者:行者123 更新时间:2023-12-03 11:56:49 25 4
gpt4 key购买 nike

使用以下代码,我非常随机地收到“引用错误”(大约每 200 次尝试一次)。

var securityPrototype = {   
init: function(){ /* ... */ },
encryptionKey: function x() {
var i = x.identifier;
return getKey(i);
}
}

securityPrototype.encryptionKey.identifier = Date.now();

function Security(){}

Security.prototype = securityPrototype;
Security.constructor = Security;

function getKey(){ /* ... */ }

var gate = new Security()
gate.encryptionKey(); // Randomly throws : ReferenceError: x is not defined

此代码段位于其他代码内,但没有使用“eval”,也没有使用“with”运算符。

我试图弄清楚是否由于任何条件可能会在这里出现此错误。

重现此内容的浏览器:Mac 和 Windows 上的 Chrome。IE 和 Safari 运行良好。

最佳答案

这是因为某些浏览器的某些版本中存在命名函数表达式实现中的错误。

在这些浏览器中,当您使用命名函数表达式时,会创建两个单独的函数对象。属性gate.encryptionKey 是对一个函数对象的引用,名称x 是对另一个函数对象的引用。它们都包含相同的代码,但它们是 Function 类的不同实例。

当您为 gate.encryptionKey.identifier 赋值时,该属性仅在 gate.encryptionKey 引用的函数对象中可用。 x 引用的函数对象没有该属性。

这些浏览器中行为的简单示例:

var f = function g(){};
f === g; // false

f.expando = 'foo';
g.expando; // undefined

此示例(示例#3)取自页面 Named function expressions demystified ,您可以在其中阅读有关命名函数表达式和实现错误的更多信息。

关于node.js - Javascript命名函数表达式,引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574926/

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