gpt4 book ai didi

Javascript 闭包

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:28 29 4
gpt4 key购买 nike

以下程序返回“本地”,根据我正在阅读的教程,它旨在演示闭包现象`

我不明白的是,为什么最后为了调用parentfunction,将其分配给变量“child”,然后调用“child”。

为什么只写 parentFunction(); 不行呢?最后呢?

var variable = "top-level";
function parentFunction() {
var variable = "local";
function childFunction() {
print(variable);
}
return childFunction;
}

var child = parentFunction();
child();

最佳答案

parentFunction() 返回您分配给 var child 的另一个函数。然后,调用 child() 以调用通过调用 parentFunction() 返回的函数

只运行 parentFunction();最后不会做任何有用的事情,因为你只会丢弃它的返回值,这是一个函数。但这行得通:

parentFunction()();

请参阅此 fiddle :http://jsfiddle.net/USCjn/

更新:一个更简单的例子:

function outer() { // outer function returns a function
return function() {
alert('inner function called');
}
}

x = outer(); // what is now in x? the inner function

// this is the same as saying:
// x = function() {
// alert('inner function called');
// }

x(); // now the inner function is called

请参阅此 fiddle :http://jsfiddle.net/bBqPY/

JavaScript中的函数可以返回函数(that can return functions(that can return functions ...))。如果你有一个返回另一个函数的函数,那么这意味着当你调用外部函数时,你得到的是内部函数,但它还没有被调用。您必须调用作为函数获得的值才能实际运行内部函数的主体。所以:

x = f();

的意思是 - 运行函数 f 并将它返回的内容(可能是字符串、数字、对象、数组或函数)存储在 x 中。但是这个:

x = f()();

意味着 - 运行一个函数 f,期望它返回一个函数并运行返回的函数(第二个括号)并将返回的函数返回的内容存储在 x 中。

这里的函数 f 是一个高阶函数,因为它返回另一个函数。函数也可以将另一个函数作为参数。一般而言,函数式编程语言(尤其是 JavaScript)最强大的思想之一是,函数只是可以返回和传递的普通值,例如数组或数字。

您必须首先掌握高阶函数的概念才能理解 JavaScript 中的闭包和事件系统。

2016年更新

请注意,目前:

function outer() {
return function() {
alert('inner function called');
}
}

可以写成:

let outer = () => () => alert('inner function called');

使用 ES6 arrow function syntax .

关于Javascript 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074133/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com