Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数作用域变量是否不可写_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

Javascript 函数作用域变量是否不可写

Javascript 函数作用域变量是否不可写,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,为什么计数器变量在第一次迭代后不递增?输出总是1add函数返回在函数add中定义的变量计数器。变量计数器的范围是函数的局部范围,这意味着每次调用函数时,它都会创建一个新变量计数器,然后初始化为零,然后递增计数器 如果您正在寻找计数器实现,那么每次都需要引用相同的计数器变量并递增该变量。这可以通过使用闭包来实现 示例:在下面的示例中,有两个函数,一个嵌套在另一个函数中。内部函数维护对外部函数环境的引用,在本例中,外部函数环境包含计数器变量。因此,即使在控件移出函数add之后,内部函数仍保持对计数器

为什么计数器变量在第一次迭代后不递增?输出总是
1

add
函数返回在函数
add
中定义的变量
计数器。变量
计数器
的范围是函数的局部范围,这意味着每次调用函数时,它都会创建一个新变量
计数器
,然后初始化为零,然后递增计数器

如果您正在寻找计数器实现,那么每次都需要引用相同的
计数器
变量并递增该变量。这可以通过使用闭包来实现

示例:在下面的示例中,有两个函数,一个嵌套在另一个函数中。内部函数维护对外部函数环境的引用,在本例中,外部函数环境包含
计数器
变量。因此,即使在控件移出函数add之后,内部函数仍保持对
计数器
变量的引用

var add=(函数(){
var计数器=0;
返回函数(){
返回++计数器;
}
})();
文件
.querySelector(“#btn”)
.addEventListener('单击',函数()){
document.querySelector('#output').textContent=add();
});
0

Increment
函数
add
返回在函数
add
中定义的变量
计数器。变量
计数器
的范围是函数的局部范围,这意味着每次调用函数时,它都会创建一个新变量
计数器
,然后初始化为零,然后递增计数器

如果您正在寻找计数器实现,那么每次都需要引用相同的
计数器
变量并递增该变量。这可以通过使用闭包来实现

示例:在下面的示例中,有两个函数,一个嵌套在另一个函数中。内部函数维护对外部函数环境的引用,在本例中,外部函数环境包含
计数器
变量。因此,即使在控件移出函数add之后,内部函数仍保持对
计数器
变量的引用

var add=(函数(){
var计数器=0;
返回函数(){
返回++计数器;
}
})();
文件
.querySelector(“#btn”)
.addEventListener('单击',函数()){
document.querySelector('#output').textContent=add();
});
0

增量
您可以将计数器设为全局变量,然后调用add函数:

function add() {
    var counter = 0;
    counter += 1;
    return counter
} 

您可以将计数器设为全局变量,然后调用add函数:

function add() {
    var counter = 0;
    counter += 1;
    return counter
} 

这是一个范围问题。换成

function add(){  
  counter = counter + 1;
}
或者,如果希望能够执行add(),请使用嵌套函数

let counter = 0;
function add() {
    counter += 1;
    return counter
}

这是一个范围问题。换成

function add(){  
  counter = counter + 1;
}
或者,如果希望能够执行add(),请使用嵌套函数

let counter = 0;
function add() {
    counter += 1;
    return counter
}

因为您每次都在0初始化它。。。代码的作用与您认为的完全相同。您在中声明了一个新的
计数器
变量,并始终将其设置为0。每次调用此函数时,它都会重置为0并递增1,然后返回1为什么变量计数器的新状态在用javascript重新分配variableOP(一台无用的机器)后未保存:),因为每次都在0初始化它。。。代码的作用与您认为的完全相同。您在中声明了一个新的
计数器
变量,并始终将其设置为0。每次调用此函数时,它都会重置为0并递增1,然后返回1为什么变量计数器的新状态在重新分配variableOP后未保存在javascript中一台无用的机器上:)@JeremyThille这是一个闭包,正如Agalo所说。闭包利用父作用域中声明的变量。
var计数器;函数add(){counter+=1;return counter;}
(函数(){var counter=0;返回函数add(){counter+=1;return counter;};};}())
为什么上面的代码在用作函数定义而不是表达式时不起作用,我也不清楚。。通过上面的解释,是不是一旦函数被声明,它的所有变量赋值就不能通过调用true来更改?我建议您阅读更多关于javascript中作用域工作原理的内容。即使是函数表达式,代码也无法工作。如果变量是在函数中声明的,它每次都会创建一个新变量。在我答案中的代码中,
add()
函数返回另一个函数,即内部函数。因此,当我们再次调用
add()
时,函数不会执行
var counter=0return++计数器。“我希望它能带来更多的清晰。”杰里米希尔说,正如阿加洛所说,这是一个终结。闭包利用父作用域中声明的变量。
var计数器;函数add(){counter+=1;return counter;}
(函数(){var counter=0;返回函数add(){counter+=1;return counter;};};}())
为什么上面的代码在用作函数定义而不是表达式时不起作用,我也不清楚。。通过上面的解释,是不是一旦函数被声明,它的所有变量赋值就不能通过调用true来更改?我建议您阅读更多关于javascript中作用域工作原理的内容。即使是函数表达式,代码也无法工作。如果变量是在函数中声明的,它每次都会创建一个新变量。在我答案中的代码中,
add()
函数返回另一个函数,即内部函数。因此,当我们再次调用
add()
时,函数不会执行
var counter=0return++计数器。我希望它能带来更多的清晰。