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。