2016-08-06 2 views
1

'함수 내 전역 변수 설정'에 대한 답변은 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

, 사용자의 설정 값 7 전을 variabile합니다. 당신이 "return i == 7"을하면 5 == 7, 따라서 false를 반환합니다. –

+0

하지만 그렇다면 글로벌 변수 i를 7로 변경하려고합니다. 그렇지 않은 경우입니다. 변수 i는 여전히 5 일 것입니다 (첫 번째 예제에서) – viery365

+0

[JavaScript가 참조로 전달되었거나 값순으로 전달되는 언어입니까?] (http://stackoverflow.com/questions/518000/is- javascript-a-pass-by-value-by-value-by- – 4castle

답변

1

으로 VAR에게

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); 

을 내가 설정하는 동일 5.

것 할 수 없다 변수에 새로운 가치를 부여하는 것이 아니라 매개 변수를 사용하는 것입니다. 은

function exp() { 
    return 5 = 7; //or console.log(5 = 7); 
} 

반송하려고 함 5 = 7; 5 뭐야? Javascript에서는 "strict mode"를 사용하지 않으면 var 키워드없이 변수를 선언 할 수 있지만 변수 이름은 number로 시작할 수 없습니다. 귀하는 = 7 (5)을하지 않는

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 
} 
+0

이제는 이해할 수 있다고 생각합니다 :) 감사합니다. :) 따라서 함수 호출의 인수는 항상 해당 함수의 매개 변수에 값을 제공하며 해당 매개 변수는 변수 이름이 아니어야합니다. 그래서 함수 생성자가'function X (name) {this.name = name} '처럼 작동하는 이유는'name '매개 변수가'name' 값을 참조하고 결코 this.'name'을 참조하지 않는 이유입니다. 지금 나는 내가 마침내 이해한다라고 생각한다 :) – viery365

2

당신은 5 = 7 (5) 항상 내가 = 7 첫 번째 방법 7