鉴于代码:
from numpy import nan
df = df.replace('NAN', nan)
结果是人们所期望的:
function stuff() {
console.log('stuffing');
}
stuff = stuff;
stuffy = () => stuff();
stuffx = () => console.log('tobi');
function stuffers(stuff = stuffx) {
stuff();
stuffy();
}
stuffers();
但是当像这样更改 stuffers 函数签名时:
tobi
stuffing
结果是:
function stuff() {
console.log('stuffing');
}
stuff = stuff;
stuffy = () => stuff();
stuffx = () => console.log('tobi');
function stuffers(stuff = stuff) {
stuff();
stuffy();
}
stuffers();
为什么只有在同名的情况下才会发生这种情况?
答案 0 :(得分:1)
您的案例中的主要问题是,您使用本地声明来全局定义全局定义的东西函数。 正如xadhix所提到的,这个声明
function stuffers(stuff = stuff) {
stuff();
stuffy();
}
编译为(我将其拆分为3部分以提供可读评论):
function stuffers() {
var stuff;
全局定义的内容在本地环境中重新声明。
stuff = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : stuff;
这里发生了函数声明(stuff = stuff)的默认赋值,但该变量已在此范围内使用未定义的值重新初始化,因此它只是将一个未定义的值再次赋值给stuff变量(stuff = stuff)< / p>
stuff(); //error
stuffy();
}
这不会发生在&#34;工作&#34;例如,本地范围内不存在stuffx,而assigment stuff = stuffx不会产生未定义的值。
从stuffers透视实际执行的内容的完整片段是
function stuffers() {
var stuff;
stuff();
stuffy();
}