我刚刚阅读了question关于'在函数内设置全局变量'的答案,但我仍有疑问。
这可能是非常基本的,但有人可以告诉我为什么在我这样做时不会发生错误?我知道传递给函数的是变量i的值的副本,但是......为什么
var i = 5;
function exp(i) {
i = 7;
console.log(i);
}
exp(i);
//logs 7
或
function exp(i) {
return i = 7;
console.log(i);
}
exp(5)
//logs 7
和:
function exp() {
return 5 = 7; //or console.log(5 = 7);
}
exp()//Uncaught ReferenceError: Invalid left-hand side in assignment
在第一个例子中我不是5 = 7?为什么函数记录'7'?
这一切都是在我在关于局部变量的精彩JavaScript Garden中看到这个例子之后出现的:
// global scope
var foo = 1;
var bar = 2;
var i = 2;
function test(i) {
// local scope of the function test
i = 5;
var foo = 3;
bar = 4;
}
test(10);
为什么测试(10)函数内部设置10 = 5不会出错?
答案 0 :(得分:2)
你不能做5 = 7. 5总是5。
i = 7等于将var i设置为7
答案 1 :(得分:1)
你的第一个方法
var i = 5;
function exp(i) {
i = 7;
console.log(i);//of course it prints 7, i belong to exp scope
}
console.log(i)//it will print five
exp(i);
你没有给i变量赋予新的价值,只是为了参数你 得到了
function exp() {
return 5 = 7; //or console.log(5 = 7);
}
你试图返回5 = 7;什么是5? 在Javascript中,如果您没有使用“严格模式”,那么您可以声明变量而不使用var关键字,但变量名称不能以数字开头。
function exp() {
return 5 + 7; //or console.log(5 + 7);//this will work
}
function exp(i) {
i = 5
return i = 7; //or console.log(5 + 7);//this will work
}