gpt4 book ai didi

javascript - Closure Conditional - 当这个返回函数没有作为参数传递时,它如何获取设置为参数的值?

转载 作者:行者123 更新时间:2023-11-30 10:33:24 26 4
gpt4 key购买 nike

因此,return function (n) 仍然返回最初作为扩充赋予其父函数的值。但我不明白为什么,当我没有从 var digit_name = (function(){ 传递 n 的值时,return function(n){ 从原始参数。

特别是因为我用 var n = 4;

覆盖了它

JS

   var digit_name = (function(){
var names;
var n = 4;
return function(n){
if(!names){
names = ['zero','one','two','three'];
}
return names[n];
}
}());
console.info(digit_name(3)); //Three

此外,如果我用数字return function(1) 覆盖return function(n),我将SyntaxError: missing formal parameter。我知道 return names[n] 不知道 n 是什么,所以为什么不给出一个 n is undefined 错误呢?

最佳答案

我不完全确定你在问什么,所以我只是想解释一下为什么你会得到你所做的输出......

当代码运行时,IIFE(立即调用的函数表达式)被执行,digit_name 引用从它返回的函数。该函数仍然可以通过闭包访问外部 nnames 变量。

然后调用 digit_name 并向其传递一个参数。 digit_name的形式参数是n,它隐藏了在外部作用域中声明的n。不再有任何方法可以引用外部 n。因此,无论您传递给 digit_name 的值都将被使用。

实际上,这种情况下的 IIFE 是毫无意义的(除了它可以防止您每次调用函数时都必须创建数组这一事实之外)并且您的代码与此等效,除了数组差异:

var digit_name = function (n) {
return ['zero','one','two','three'][n];
};
console.info(digit_name(3)); // "three"

关于javascript - Closure Conditional - 当这个返回函数没有作为参数传递时,它如何获取设置为参数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526530/

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