>  기사  >  웹 프론트엔드  >  JS 전역 변수 및 지역 변수 구문 분석

JS 전역 변수 및 지역 변수 구문 분석

怪我咯
怪我咯원래의
2017-03-31 09:17:261660검색

이런 원리에 근거도 없는 맹목적인 연구와 테스트가 나를 혼란스럽게 만들었습니다. 사실 원리를 이해하면 그럴 필요가 없나요? 많은 테스트를 하나씩 수행한 다음 규칙을 그립니다.

var의 규칙은 다음과 같습니다. var를 사용하여 선언된 변수는 내부 변수입니다. 그렇지 않으면 어떻게 해서든 전역 변수가 먼저 호출됩니다.

이에 대한 규칙은 다음과 같습니다. 메소드 함수의 this는 항상 자신을 가리키고 일반 함수의 this는 항상 DOMWindow를 가리킵니다.

// GodDamnTest1
function Foo() { 
var a = 123; // 局部变量, 所有子函数的全局变量
this.a = 456; // 对象属性
(function() { 
alert(a); // 123, 全局
alert(this.a); // undefined, 普通函数, this指向DOMWindow 
})(); 
} 
var f = new Foo(); 
// GodDamnTest2
function Foo() { 
var a = 123; 
this.a = 456; 
(function(a) { // 局部声明
alert(a); // 456, 被函数局部声明的a覆盖了全局 
})(this.a); 
} 
var f = new Foo(); 
// GodDamnTest3
function Foo() { 
var a = 123; 
this.a = 456; 
(function() { 
alert(a); // 123, 全局
alert(this.a); // undefined, DOMWindow 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
})(); 

// GodDamnTest4
function Foo() { 
(function() { 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
var b = 0; 
alert(b); // 0, 这样的测试也写出来了!
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();


놀랍게도 마지막 알림(b) 결과는 여전히 789입니다. // 전혀 놀랍지 않습니다!

// GodDamnTest5
function Foo() { 
(function() { 
this.b = 789; // window.b = 789
})(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // undefined, 全局
var b = 0; 
alert(b); // 0, 还有这种测试!
})(); 
} 
var f = new Foo(); 
(function() { 
alert(this.b); // 789, window.b
alert(b); // 789, window.b
})();

PS: 지역 변수를 삭제하는 JS 메서드

alert('value:'+str+'\ttype:'+typeof(str)) //声明变量前,引用
var str="dd";
alert('value:'+str+'\ttype:'+typeof(str)) //声明并赋值变量后,引用
str=undefined;             //删除局部变量
alert('value:'+str+'\ttype:'+typeof(str)) //取消变量后,引用,和第一个相同



위 내용은 JS 전역 변수 및 지역 변수 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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