js 작용역 소기var 변수와function 차이
function createD(){
var dir = {
name: "d",
ctrl: myCtrl,
ctrl2: yourCtrl
};
return dir;
function myCtrl (){
console.log('my ctrl');
}
var yourCtrl = function(){
console.log('your ctrl');
};
}
var d = createD();
d.ctrl();
d.ctrl2();
출력 결과를 맞힐 수 있어요.
//출력:
d.ctrl(); // : my ctrl
d.ctrl2(); // : Uncaught TypeError: d.ctrl2 is not a function
우선 상기 예에서 쓰는 방법은 사실 규범에 부합되지 않기 때문에 변수와 함수의 정의는 모두 앞에 두는 것이 가장 좋다.
var의function의 성명은 다르다. var의 성명은 변수 성명을 작용역의 맨 위로 끌어올릴 수 있지만 변수의 값은 제자리에 있기 때문에 변수 값은 리턴 후에도 실행되지 않는다.function 성명은 모두 맨 위로 올라가 실행됩니다.
따라서createD () 안에 있는yourCtrl 변수는 실제적으로 undefined가 아직 오지 않았고 값이 리턴되었습니다.
사전 컴파일된 코드는 다음과 같습니다.
function createD(){
var dir = {
name: "d",
ctrl: function(){
console.log('my ctrl');
},
ctrl2: yourCtrl
},
yourCtrl;
return dir;
yourCtrl = function(){
console.log('your ctrl');
};
}
js를 미리 컴파일할 때 작용역을 스캔하여 작용역 내의 함수 성명을 작용역 맨 위로 끌어올립니다.실행 코드는 제자리에 있습니다.
예:
function(){
console.log('start');
var a = 1;
}
, :
function(){
var a;
console.log('start');
a = 1;
}
설령 이vara가if의 괄호 안에 있다 하더라도 앞당겨질 것이다.
그래서 우리가 자주 강조하는 인코딩 규범은 여전히 매우 존재적 의의가 있다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.