Javascript `这个`内部函数与函数无关?
输出Javascript `这个`内部函数与函数无关?,javascript,Javascript,输出 var f2 = undefined var f1 = function () { f2 = this console.log('here') } f1() f2() 如何从f1()内部将f2设置为f1?这实际上不是正确的设置方式,但即使是这样,您也从未调用过f1,因此f2的值永远不会更改。您将需要: f2() ^ TypeError: undefined is not a function 也就是说,上面的方法仍然不起作用,因为独立函数中的这个不是函数。在浏览器中,它
var f2 = undefined
var f1 = function () {
f2 = this
console.log('here')
}
f1()
f2()
如何从f1()内部将f2设置为f1?这实际上不是正确的设置方式,但即使是这样,您也从未调用过
f1
,因此f2
的值永远不会更改。您将需要:
f2()
^
TypeError: undefined is not a function
也就是说,上面的方法仍然不起作用,因为独立函数中的这个
不是函数。在浏览器中,它将是窗口
对象,您将得到类似类型错误:对象不是函数
。在其他上下文中(例如node.js),这将取决于它们如何实现顶级对象(如果有的话)
这里有一个解释函数如何与this
关键字一起工作的示例。在这种情况下,如果不按名称引用外部函数或更改调用f1
,则无法执行此操作:
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1();
f2();
旁注,分号省略很严重。这实际上不是正确的设置方式,但即使是这样,您也从未调用过
f1
,因此f2
的值永远不会更改。您将需要:
f2()
^
TypeError: undefined is not a function
也就是说,上面的方法仍然不起作用,因为独立函数中的这个
不是函数。在浏览器中,它将是窗口
对象,您将得到类似类型错误:对象不是函数
。在其他上下文中(例如node.js),这将取决于它们如何实现顶级对象(如果有的话)
这里有一个解释函数如何与this
关键字一起工作的示例。在这种情况下,如果不按名称引用外部函数或更改调用f1
,则无法执行此操作:
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1();
f2();
旁注,分号省略很严重。这实际上不是正确的设置方式,但即使是这样,您也从未调用过
f1
,因此f2
的值永远不会更改。您将需要:
f2()
^
TypeError: undefined is not a function
也就是说,上面的方法仍然不起作用,因为独立函数中的这个
不是函数。在浏览器中,它将是窗口
对象,您将得到类似类型错误:对象不是函数
。在其他上下文中(例如node.js),这将取决于它们如何实现顶级对象(如果有的话)
这里有一个解释函数如何与this
关键字一起工作的示例。在这种情况下,如果不按名称引用外部函数或更改调用f1
,则无法执行此操作:
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1();
f2();
旁注,分号省略很严重。这实际上不是正确的设置方式,但即使是这样,您也从未调用过
f1
,因此f2
的值永远不会更改。您将需要:
f2()
^
TypeError: undefined is not a function
也就是说,上面的方法仍然不起作用,因为独立函数中的这个
不是函数。在浏览器中,它将是窗口
对象,您将得到类似类型错误:对象不是函数
。在其他上下文中(例如node.js),这将取决于它们如何实现顶级对象(如果有的话)
这里有一个解释函数如何与this
关键字一起工作的示例。在这种情况下,如果不按名称引用外部函数或更改调用f1
,则无法执行此操作:
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1();
f2();
请注意,分号省略是很糟糕的。没有包装器,我不确定有什么方法可以做到这一点
// Referring to f1 by name..
var f2 = undefined;
var f1 = function () {
f2 = f1;
console.log('here');
}
f1();
f2();
// .. or using the apply method to change the value of "this", though still
// referring to f1 by name in some sense (at the call site)
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1.apply(f1);
f2();
我不确定这在您的实际用例中是否有效
var wrapper = {}
wrapper.f1 = function () {
wrapper.f2 = wrapper.f1
console.log('invoked', this)
}
wrapper.f1()
wrapper.f2()
另一方面,第二个示例显示了浏览器中的窗口对象。我不确定它将在节点中显示什么。我不确定在没有包装器的情况下有什么方法可以做到这一点
// Referring to f1 by name..
var f2 = undefined;
var f1 = function () {
f2 = f1;
console.log('here');
}
f1();
f2();
// .. or using the apply method to change the value of "this", though still
// referring to f1 by name in some sense (at the call site)
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1.apply(f1);
f2();
我不确定这在您的实际用例中是否有效
var wrapper = {}
wrapper.f1 = function () {
wrapper.f2 = wrapper.f1
console.log('invoked', this)
}
wrapper.f1()
wrapper.f2()
另一方面,第二个示例显示了浏览器中的窗口对象。我不确定它将在节点中显示什么。我不确定在没有包装器的情况下有什么方法可以做到这一点
// Referring to f1 by name..
var f2 = undefined;
var f1 = function () {
f2 = f1;
console.log('here');
}
f1();
f2();
// .. or using the apply method to change the value of "this", though still
// referring to f1 by name in some sense (at the call site)
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1.apply(f1);
f2();
我不确定这在您的实际用例中是否有效
var wrapper = {}
wrapper.f1 = function () {
wrapper.f2 = wrapper.f1
console.log('invoked', this)
}
wrapper.f1()
wrapper.f2()
另一方面,第二个示例显示了浏览器中的窗口对象。我不确定它将在节点中显示什么。我不确定在没有包装器的情况下有什么方法可以做到这一点
// Referring to f1 by name..
var f2 = undefined;
var f1 = function () {
f2 = f1;
console.log('here');
}
f1();
f2();
// .. or using the apply method to change the value of "this", though still
// referring to f1 by name in some sense (at the call site)
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1.apply(f1);
f2();
我不确定这在您的实际用例中是否有效
var wrapper = {}
wrapper.f1 = function () {
wrapper.f2 = wrapper.f1
console.log('invoked', this)
}
wrapper.f1()
wrapper.f2()
另一方面,第二个示例显示了浏览器中的窗口对象。我不确定它将在节点中显示什么。首先,您没有运行
f1()
No,调用f1()对我不起作用。console.log(此)
然后您就会知道这是什么。首先,您没有运行f1()
No,调用f1()对我不起作用。console.log(此)
然后你就知道这是什么了。首先你没有运行f1()
不,调用f1()对我不起作用。console.log(这个)
然后你就知道这是什么了。首先你没有运行f1()
不,调用f1()对我不起作用。console.log(这个)
那么你就知道这是什么了。这代码对你有用吗?因为我还是会犯同样的错误。我在这里使用node.js。这个代码对你有用吗?因为我还是会犯同样的错误。我在这里使用node.js。这个代码对你有用吗?因为我还是会犯同样的错误。我在这里使用node.js。这个代码对你有用吗?因为我还是会犯同样的错误。我在这里使用node.js。