>  기사  >  웹 프론트엔드  >  js 변수 승격에 대한 자세한 설명

js 변수 승격에 대한 자세한 설명

小云云
小云云원래의
2018-02-26 14:08:271500검색


1. JavaScript 코드 실행은 두 단계로 나뉩니다.

  • 사전 구문 분석 단계: 사전 구문 분석 단계에서 js는 var로 선언된 변수와 function으로 시작하는 명령문 블록을 승격하고, var로 선언된 변수와 함수를 승격합니다. 코드 앞에. 함수는 전체적으로 승격됩니다. var로 선언된 변수는 변수 선언만 승격되며 할당 작업은 동일한 이름을 가진 함수에 대한 승격 규칙과 동시에 수행되지 않습니다. 승격되지만 후속 함수는 이전 함수를 덮어씁니다

    alert(a)//undefinedvar a = 1;  
    
    为什么会输出undefined呢?
    模拟提升的之后的代码 ,上一段代码相当于 var a;  //声明一个变量。但是没有初始化Alert(a);
     a = 1;  //初始化为1----------
    fun();    //在C语言中,如果不先声明函数,先调用后声明函数会报错,但是js会正常运行function fun(){
        alert(“函数被声明了”);
    }
    
    代码提升后 相当于 
    function fun(){
        alert(“函数被声明了”);
    }
    
    fun();
  • 4. 변수 이름과 함수 이름은 동일한 승격 규칙입니다. 동일한 이름의 변수와 함수가 있으면 해당 변수는 무시되고 해당 함수만 승격됩니다
  • func1();  //输出  我是后声明的函数function func1(){
       console.log('我是先声明的函数');
    }function func1(){
       console.log('我是后声明的函数');
    }
    模拟提升后的代码function func1(){
       console.log('我是先声明的函数');
    }function func1(){
       console.log('我是后声明的函数');
    }
    func1();
     函数名也是变量,后面的会覆盖前面。

    5 .변수 승격은 범위별로 나누어집니다

    alert(foo); //输出function foo(){}function foo(){
    }
    var foo = 2;
    alert(foo); //输出 2----------模拟提升后的代码function foo{}Alert(foo);
    foo = 2;
    alert(foo);
  • 6. 함수 표현식은 승격되지 않습니다
var num = 123; function test(){
     console.log(num);     var num = 10;
 }
 test(); //输出undefined; ----------


模拟变量提升后的代码  var num;function test(){var num
   console.log(num); //函数内部声明了num,但是没赋值。因为在函数内部声明了num,所以函数会使用它内部声明的num,而不会去全局中找  
   num = 10;
  }
num = 123;

7. 마지막으로 또 다른 연습을 해보겠습니다

var s1 = “qq”;

func();  // func is not a function
 var func = function(){
    alert("1234");
 }


----------


提升后的代码var func;
func();
func = function(){
    alert("1234");
};
 用var声明的变量(包括函数表达式),只提升声明,不提升赋值操作

}

foo();

function foo() {
    console.log(s1); 
    var s1 = "tengxunqq";
    console.log(s1);

관련 추천 :

JS 변수 및 해당 범위에 대한 지식 포인트 소개

Js 변수 범위를 선언하는 방법은 무엇입니까? 함수 내의 범위 예제에 대한 자세한 설명


js 변수 승격 및 함수 선언 사전 구문 분석 예제

위 내용은 js 변수 승격에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.