我写的代码如下,
function Myfunction(){ Myfunction.myvar = "somevar"; }
执行功能后,我可以访问Myfunction.myvar
怎么工作?如果我这样做,这个隐藏的问题是什么?
如果有任何问题,请说明上下文.
解决方法
How is it working?
当在某些执行上下文中声明一个函数时,绑定将添加到该上下文的变量环境中.当引用标识符时,将检查当前变量环境,以查看该标识符是否存在绑定.
如果没有绑定,则检查外部变量环境,依此类推,备份到全局范围.
所以:
// OUTER SCOPE // Binding exists for 'example' function example() { // INNER SCOPE // No binding for 'example' // References 'example' in outer scope example.x = 1; }
What is the problem hidden in this?
没有(一般来说,虽然这是否适合您的解决方案取决于您要做什么).
您正在有效地创建该函数的“静态”属性.由于JavaScript函数是一流的,您可以像其他任何对象一样设置属性.
请注意,如果您有一个命名函数表达式,而不是一个函数声明,行为是不同的:
var x = function example () { // Identifier 'example' is only in scope in here };