programing

변수 선언에 'var'를 사용하는 것은 옵션입니까?

sourcejob 2022. 11. 23. 20:13
반응형

변수 선언에 'var'를 사용하는 것은 옵션입니까?

"var"는 옵션입니까?

myObj = 1;

와 같습니까?

var myObj = 1;

둘 다 가 있는 것 요.var는 옵션입니다.★★★★★★★★★★★★★★★★★?

을 하다「 」를 사용하고 var변수는 사용자가 속한 범위 내에서 선언됩니다(예: 함수의 경우).★★★★★★★★★★★★★★★를 사용하지 않는 경우는var변수는 지정된 이름 또는 글로벌오브젝트(브라우저에서 실행하는 경우)의 변수를 발견할 때까지 범위 레이어를 통해 버블업됩니다. 값은 글로벌 변수와 매우 유사합니다.단, 다음 방법으로 삭제할 수 있습니다.delete볼때).var를 사용하는 var글로벌 스코프에서는 변수는 진정한 글로벌이며 삭제할 수 없습니다.

이것은 javascript에서 가장 위험한 문제 중 하나이며, 폐지하거나 최소한 경고에 대한 경고를 해야 한다고 생각합니다. 때문입니다.var실수로 공통 변수 이름이 글로벌 객체에 바인딩되었습니다.이로 인해 이상하고 디버깅하기 어려운 동작이 발생합니다.

이것은 Javascript의 까다로운 부분 중 하나이지만, 그 핵심 기능 중 하나이기도 합니다.으로 var★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★var이것은 마치 이전에 사용한 변수에 대해 말하는 것과 같습니다.

var foo = 'first time use';
foo = 'second time use';

범위에 관해서는 변수가 자동으로 글로벌해지는 것은 사실이 아닙니다.오히려 Javascript는 스코프 체인을 따라 이동하여 변수를 이전에 사용한 적이 있는지 확인합니다.이전에 사용된 것과 동일한 이름의 변수 인스턴스를 찾으면 해당 변수와 선언된 범위가 사용됩니다.어느 곳에서도 변수를 발견하지 못하면 결국 글로벌 오브젝트에 도달합니다(window브라우저)에 변수를 부가합니다.

var foo = "I'm global";
var bar = "So am I";

function () {
    var foo = "I'm local, the previous 'foo' didn't notice a thing";
    var baz = "I'm local, too";

    function () {
        var foo = "I'm even more local, all three 'foos' have different values";
        baz = "I just changed 'baz' one scope higher, but it's still not global";
        bar = "I just changed the global 'bar' variable";
        xyz = "I just created a new global variable";
    }
}

이 동작은 네스트된 함수 및 콜백과 함께 사용하면 매우 강력합니다.의 내용을 학습하다functions자바스크립트

아니요, 그들은 동등하지 않습니다.

★★★★★★★★★★★★★★★★ myObj = 1;글로벌 변수를 사용하고 있습니다.

후자의 선언은 사용 중인 범위의 로컬 변수를 만듭니다.

차이를 이해하려면 다음 코드를 사용해 보십시오.

external = 5;
function firsttry() {
  var external = 6;
  alert("first Try: " + external);
}

function secondtry() {
  external = 7;
  alert("second Try: " + external);
}

alert(external); // Prints 5
firsttry(); // Prints 6
alert(external); // Prints 5
secondtry(); // Prints 7
alert(external); // Prints 7

두 번째 함수는 전역 변수 "외부"의 값을 변경하지만 첫 번째 함수는 변경되지 않습니다.

이치노" "로:var이릅없 릅키 릅릅키 릅릅키 릅키이치노

var foo = 1; // declared properly
bar = 2; // implied global
window.baz = 3; // global via window object

해, 이러한 변수 「 」는, 「 」입니다.foo,bar , , , , 입니다.baz모두 동일합니다.이것은 사실이 아니다.글로벌 변수:var있다[[DontDelete]]이치노

delete foo; // false
delete bar; // true
delete baz; // true

foo; // 1
bar; // ReferenceError
baz; // ReferenceError

이것이 당신이 항상 사용해야 하는 이유입니다.var글로벌 변수의 경우에도 마찬가지입니다.

이 주제에 대해 너무 많은 혼란이 있고, 기존의 어떤 대답도 모든 것을 명확하고 직접적으로 다루지 않습니다.다음은 인라인 코멘트를 사용한 몇 가지 예입니다.

//this is a declaration
var foo;

//this is an assignment
bar = 3;

//this is a declaration and an assignment
var dual = 5;

선언은 DontDelete 플래그를 설정합니다.할당은 그렇지 않습니다.

선언은 해당 변수를 현재 범위에 연결합니다.

할당되었지만 선언되지 않은 변수는 연결할 범위를 찾습니다.즉, 같은 이름의 변수가 발견될 때까지 범위의 먹이 사슬을 따라 이동합니다.찾을 수 없는 경우 최상위 범위(일반적으로 글로벌)에 연결됩니다.

function example(){
  //is a member of the scope defined by the function example
  var foo;

  //this function is also part of the scope of the function example
  var bar = function(){
     foo = 12; // traverses scope and assigns example.foo to 12
  }
}

function something_different(){
     foo = 15; // traverses scope and assigns global.foo to 15
}

삭제 함수의 분석에서는 어떤 일이 일어나고 있는지를 명확하게 설명하기 위해 변수 인스턴스화와 할당을 광범위하게 다룹니다.

var는 옵션입니다. var변수를 로컬 스코프에 넣습니다.가 "" 없이 되어 있는 var, 글로벌 범위 내에 있습니다. 삭제할 수 없습니다. 를 클릭합니다.

편집하다

삭제할 수 없는 부분은 특정 환경에서 어느 시점에서는 사실이라고 생각했습니다.꿈을 꿨나 봐요.

이 바이올린을 확인해 주세요.http://jsfiddle.net/GWr6Z/2/

function doMe(){

a = "123"; // will be global
var b = "321"; // local to doMe
alert("a:"+a+"  --  b:"+b);

b = "something else"; // still local (not global)
alert("a:"+a+"  --  b:"+b);

};


doMe()
alert("a:"+a+"  --  b:"+b); // `b` will not be defined, check console.log

그들은 같지 않다.

되지 않은 변수를 사용하지 않음)var는 글로벌오브젝트의 ) 。window ''오브젝트'withblock)을 클릭합니다.

" "로 var되지 않습니다블록 ).

업데이트: ECMAScript 2015

let블록 범위를 가지기 위해 ECMAScript 2015에서 도입되었습니다.

Javascript의 var 키워드는 목적이 있습니다.

var 키워드를 지정하지 않고 변수를 선언하면 다음과 같이 됩니다.

myVar = 100;

스크립트의 모든 부분에서 액세스할 수 있는 글로벌 변수가 됩니다.의도하지 않았거나 모르고 있는 경우 Javascript의 다른 위치에서 변수 이름을 다시 사용하면 문제가 발생할 수 있습니다.

var 키워드를 지정하여 변수를 선언하는 경우 다음과 같이 됩니다.

var myVar = 100;

스코프({] - 중괄호, 함수, 파일, 배치 위치에 따라 다름)에 대해 로컬입니다.

이게 변수를 더 안전하게 치료할 수 있는 방법이야따라서 의도적으로 변수를 선언하지 않는 한 var 키워드를 사용하여 선언해 보십시오.

오늘 StackOverflow에서 다음 질문을 생각해 보십시오.

간단한 Javascript 질문

좋은 테스트와 실용적인 예는 위의 시나리오에서 발생하는 것입니다.
자바스크립트

호가뭐 뭐???
이 코드는 사용자가 처음 버튼을 클릭했을 때만 작동합니다.

★★★★★★★★★★★★★★★★★?
, 그럼 여기에다가 더해져요.var키워드를 지정합니다.

Javascript에는 변수가 없기 때문에 프로그래머인 Var는 변수를 선언할 수 없습니다.Javascript에 객체가 있습니다.Var는 명시적으로 정의되지 않은 개체에 이름을 선언합니다.할당은 값이 지정된 개체에 이름을 핸들로 할당합니다.

var를 사용하면 Javacript 인터프리터에게 다음 두 가지를 알 수 있습니다.

  1. 이름에 위임 역 트래버설 조회 값을 사용하지 않으려면 대신 이 값을 사용하십시오.
  2. 이름을 삭제하지 않도록

var를 생략하면 Javacript 인터프리터는 동일한 이름을 가진 객체의 처음 발견된 이전 인스턴스를 사용하도록 지시합니다.

키워드로서의 Var는 이름으로서의 Javascript가 잘못된 결정에서 비롯된 것과 마찬가지로 언어 디자이너의 잘못된 결정에서 비롯되었습니다.

ps. 위의 코드 예를 살펴봅니다.

스코프에 관한 모든 것은 차치하고, 다른 방법으로 사용할 수 있습니다.

console.out(var myObj=1);
//SyntaxError: Unexpected token var
console.out(myObj=1);
//1

무언가의 진술과 표현

아니요, "필수"는 아니지만 그렇지 않으면 중대한 문제가 발생할 수 있습니다.변수를 var로 정의하지 않으면 해당 변수를 코드 부분의 범위 내에 넣습니다.그렇지 않으면 해당 범위에 포함되지 않으며 현재 함수의 범위를 벗어나는 동일한 이름으로 이전에 정의된 변수를 덮어쓸 수 있습니다.

나는 방금 내 동료가 추천한 포럼에서 답을 찾았다.함수 외부에 변수를 선언하면 변수는 항상 전역입니다.var 키워드를 사용하든 사용하지 않든 상관없습니다.그러나 함수 내에 변수를 선언하면 큰 차이가 있습니다.함수 내에서 var 키워드를 사용하여 변수를 선언하면 로컬 변수가 되지만 var 키워드를 지정하지 않고 변수를 선언하면 글로벌 변수가 됩니다.이전에 선언한 변수를 덮어쓸 수 있습니다.-자세한 내용은 http://forum.webdeveloperszone.com/question/what-is-the-difference-between-using-var-keyword-or-not-using-var-during-variable-declaration/ #sthash.xNnLrwc3.dpuf 를 참조하십시오.

언급URL : https://stackoverflow.com/questions/2485423/is-using-var-to-declare-variables-optional

반응형