Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Global_Local - Fatal编程技术网

JavaScript中的全局变量到局部变量

JavaScript中的全局变量到局部变量,javascript,variables,global,local,Javascript,Variables,Global,Local,我知道全局变量是在函数外部声明时创建的(says) 如果我创建一个全局变量并在函数中编辑它,它会变成局部变量吗?函数给出的新值是否成为全局值?是 只有在函数中使用var关键字声明局部变量时,才会创建局部变量。新值成为全局值。否,编辑全局变量不会更改变量的范围。指定的新值将成为全局值 通常,不,编辑全局文件不会使其成为本地文件: var myglob = 5; function incGlob() { myglob = myglob + 1; } incGlob(); console.

我知道全局变量是在函数外部声明时创建的(says)

如果我创建一个全局变量并在函数中编辑它,它会变成局部变量吗?函数给出的新值是否成为全局值?


只有在函数中使用
var
关键字声明局部变量时,才会创建局部变量。

新值成为全局值。

否,编辑全局变量不会更改变量的范围。指定的新值将成为全局值


通常,不,编辑全局文件不会使其成为本地文件:

var myglob = 5;
function incGlob() {
    myglob = myglob + 1;
}

incGlob();
console.log(myglob); // is 6 now
但是,如果将全局变量作为参数传递,则该参数是本地副本:

var myglob = 5;
function incArg(myloc) {
    myloc = myloc + 1;
}

incArg(myglob);
console.log(myglob); // is still 5
请注意,对象是通过引用传递的,因此编辑参数变量的成员变量会更改传入的原始对象的成员变量:

var myglob = { foo:5 };
function editLoc(myloc) {
    myloc.foo = 6;
}

editLoc(myglob);
console.log(myglob.foo); // foo is 6 now
最后,请注意上面
editLoc
中的局部变量只是一个引用。如果我们试图覆盖整个对象(而不是成员变量),函数将丢失对原始对象的引用:

var myglob = { foo:5 };
function clobberLoc(myloc) {
    myloc = { bar:7 };
}

clobberLoc(myglob);
console.log(myglob.foo); // myglob is unchanged...
// ...because clobberLoc didn't alter the object,
// it just overwrote its reference to the object stored in myglob 

你为什么不试试呢?简单地说:)我更喜欢
window.myGlobal='foo'
而不是
var myGlobal
,因为
var
的使用在函数之外是误导性的。。。(它不是一个词法变量,而是一个属性,不适用于相同的闭包规则)不。我就这么做了<代码>变量不执行任何操作。函数中声明的变量仍将指向全局变量。@Bear:No<代码>变量确实创建了本地范围。给我演示一下。
var myglob = { foo:5 };
function clobberLoc(myloc) {
    myloc = { bar:7 };
}

clobberLoc(myglob);
console.log(myglob.foo); // myglob is unchanged...
// ...because clobberLoc didn't alter the object,
// it just overwrote its reference to the object stored in myglob