JavaScript函数如何在函数内部重写自身?背后的工作原理是什么?

3

这是我已经尝试过的一些代码

目前还需要更多上下文才能正确理解这段话所代表的含义。
function myFunc(){

    alert("3");

    myFunc = function (){

        alert("something else");

    }


}

我希望了解JavaScript背后的运作机制。

当我执行myFunc时,它会弹出2,而当我再次执行它时,它会弹出"something else"。当调用myFunc时,函数内部是如何重写自身的?

2个回答

5

myFunc在全局命名空间中,因此您可以重新定义它,这会在使用myFunc = function() ...给它赋新函数时发生。

函数是对象,因此随着时间的推移可以为其分配新的定义。如果您想防止函数再次运行,甚至可以设置myFunc = undefined;


1
当我们在同一个函数内重新定义函数时,它的激活对象是否仍然保持不变? - abdul raziq
我认为激活对象不同,它们是不同的函数。 - grape_mao
@grap_mao 是的,我也是这样。 - abdul raziq
一个原因是函数可以在第一次调用时检查运行环境(例如CSS或JS支持),然后重写自己以便下次自动调用正确的版本,从而优化掉环境测试的开销。 - Matt Sach

1
你只是在第二次重新声明函数。
页面加载时,你声明myFunc(),它会弹出3。
当你执行myFunc()时,你会声明一个新的函数,它会弹出“something else”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接