设置Javascript函数的作用域问题

Scope Issues With Setting Javascript Function

本文关键字:作用域 问题 函数 Javascript 设置      更新时间:2023-09-26

我需要"更新"另一个javascript文件中存在的函数。文件如下:

function jf(){
    alert('1');
}
//call jf periodically
 jf();   

之后加载的第二个js文件如下:

console.log(jf);
console.log(window.jf);
var func=function(){
  alert('2');  
};
jf=func;
window.jf=func;

第一个日志成功地返回了原始的jf方法,第二个没有。第一个集合似乎设置了局部变量jf,而第二个集合基本上什么都不做。是否有实现此功能的方法?

根据Javascript闭包-全局范围中重写函数的行为

CCD_ 1和CCD_。它们将覆盖内部作用域中的外部定义,但不会在外部作用域上替换它。

这意味着您只能在相同的执行上下文中重写function jf()的初始定义。否则,用window.jf = function(){... 替换function jf(){ ...

此外,在检查器控制台中运行测试可能会有所帮助。

首先,使用变量:

var jf = function () {
    alert('1');
};
jf();

然后第二位应该可以正常工作:

var func = function () {
    alert('2');
};
jf = func;
jf();