Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 - Fatal编程技术网

JavaScript-立即将变量写入函数

JavaScript-立即将变量写入函数,javascript,Javascript,我有这样的代码: var i = 5; function x() { console.log(i); } i = 6; x();//6 (这确实简化了,但问题依然存在)。我知道这就是它的目的 是否有某种方法可以永久“写入”变量到函数中,因此当我执行x(),我将得到5(原始值),而不是6(新值,在定义函数后分配)?您只能通过复制变量的值来实现这一点: var i = 5; var x = function(copy_of_i) { return function() {

我有这样的代码:

var i = 5;

function x() {
    console.log(i);
}

i = 6;

x();//6
(这确实简化了,但问题依然存在)。我知道这就是它的目的


是否有某种方法可以永久“写入”变量到函数中,因此当我执行
x()
,我将得到5(原始值),而不是6(新值,在定义函数后分配)?

您只能通过复制变量的值来实现这一点:

var i = 5;
var x = function(copy_of_i) {
  return function() {
    console.log(copy_of_i);
  };
}(i);

i = 6;
x(); // logs 5
其中“x”被分配了调用匿名函数的结果。该函数接受一个参数,代码传入值“i”。匿名函数返回将成为“x”值的函数。该函数始终记录最初传递给匿名函数的值。它永远不会改变

当“i”的值是一个对象而不是像数字那样的基本类型时,事情会变得更复杂。对象值是引用,因此虽然可以确保“x”函数始终引用同一对象,但不能确保其他内容不会更改对象。当然,您可以使用
Object.freeze()
来防止更改,但这也会影响外部上下文。必须进行某种类型的对象复制,以使情况与上述答案中的行为平行,并且对象复制可能会变得怪异