函数参数作为局部变量名的数字

时间:2016-08-06 20:44:10

标签: javascript

我刚刚阅读了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不会出错?

2 个答案:

答案 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
 }