>  기사  >  웹 프론트엔드  >  JavaScript 변수 유형을 사용하는 몇 가지 기술에 대해 논의

JavaScript 변수 유형을 사용하는 몇 가지 기술에 대해 논의

伊谢尔伦
伊谢尔伦원래의
2017-07-18 10:41:541513검색

js는 지역 변수, 클래스 변수, 개인 변수, 인스턴스 변수, 정적 변수 및 전역 변수와 같은 유형의 변수를 지원합니다.

로컬 변수:
로컬 변수는 일반적으로 {} 범위 내에서 유효한 변수, 즉 다음과 같이 명령문 블록 내에서 유효한 변수를 나타냅니다.

function foo(flag)  
{  
 var sum = 0;  
 if(flag == true)  
 {  
  var index;  
  for(index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
}  
 document.write("index is :"+index+"<br>");  
 return sum;  
}  
//document.write("sum is :" +sum+"<br>");  
document.write("result is :"+foo(true)+"<br>");

코드가 실행된 후의 출력 결과 is: "index is :undefine", "result is:0"이면 출력하려는 ​​인덱스 변수의 값이 정의되지 않음, 즉 정의되지 않음을 알 수 있습니다. 따라서 if 문 블록이 끝난 후 인덱스 변수가 소멸되는 것을 알 수 있습니다. "sum" 변수는 어떻습니까? 이 변수는 foo() 함수 섹션이 실행된 후 소멸됩니다. 제가 주석 처리한 문을 제거하고 다시 실행하면 시스템에서 오류가 보고되는 것을 볼 수 있습니다. 위의 foo() 함수를 다음과 같이 변경하면 주목할 가치가 있습니다.

function foo(flag)  
 {  
  var sum = 0;  
  for(var index=0;index<10;index++)  
  {  
   sum +=index;  
  }  
  document.write("index is :"+index+"<br>");  
  return sum;  
}

인덱스 값("index is :10")이 출력될 수 있다는 것을 알 수 있습니다. 이것이 js의 차이점입니다. 및 기타 언어에서는 인덱스가 for 루프의 {} 외부에서 정의되므로 foo() 함수가 사용된 후에 해당 범위가 삭제됩니다.

클래스 변수:
클래스 변수는 실제로 클래스의 속성, 필드 또는 메서드입니다. 이 변수는 우리가 시작한 Student 클래스와 같이 클래스의 인스턴스 개체가 삭제된 후 자동으로 삭제됩니다. 이것에 대해서는 많이 논의하지 않을 것이며 직접 시도해 볼 수 있습니다.

개인 변수:
개인 변수는 클래스에서 내부적으로 사용되는 속성이며 외부에서 호출할 수 없습니다. 해당 정의는 var를 사용하여 선언됩니다. var로 선언되지 않은 경우 변수는 다음과 같은 전역 변수가 됩니다(아래에서 설명합니다).

function Student(name,age,from)  
{  
 this.name = FormatIt(name);  
 this.age = age;  
this.from = from;  
 var origName = name;  
 var FormatIt = function(name)  
 {  
 return name.substr(0,5);  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}

여기서는 두 개의 개인 변수, 즉 origName과 FormatIt()을 각각 정의했습니다(다음에 따라). 객체 지향 해석, 클래스의 속성에 의해 호출되어야 함).
이 경우 변수는 함수 유형 변수이고 함수도 Object 클래스의 상속 클래스에 속하기 때문에 이 경우 메서드를 변수라고 부릅니다. 이 경우 var zfp = new Student("3zfp",100,"ShenZhen")을 정의하면 됩니다. 그러나 이 두 변수는 zfp.origName 및 zfp.FormatIt()을 통해 액세스할 수 없습니다.

다음 사항에 유의하세요.

1. 개인 변수는 이 항목으로 표시할 수 없습니다.
2. 프라이빗 메소드 유형의 변수에 대한 호출은 메소드가 선언된 이후에 이루어져야 합니다. 예를 들어 Student 클래스를 다음과 같이 변환합니다.

function Student(name,age,from)  
{  
 var origName = name;  
 this.name = FormatName(name);  
 this.age = age;  
 this.from = from;  
 var FormatName = function(name)  
 {  
  return name+".china";  
 }  
 this.ToString = function()  
 {  
  return "my information is name: "+origName+",age : "+this.age+", from :" +this.from;  
 }  
}  
var zfp = new Student("3zfp",100,"ShenZhen");

코드가 실행된 후 "개체를 찾을 수 없음" 오류가 보고됩니다. 이는 FormatName()이 정의되지 않았음을 의미합니다.

3. private 메소드는 다음과 같이 this가 가리키는 변수(public 변수)에 접근할 수 없습니다:

function Student(basicinfo)  
{  
 this.basicInfo = basicinfo;  
 var FormatInfo = function()  
 {  
  this.basicInfo.name = this.basicInfo.name+".china";  
 }  
 FormatInfo();  
}  
function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
var zfp = new Student(new BasicInfo("3zfp",100,"ShenZhen"));

코드를 실행한 후, 시스템은 "this.basicInfo가 비어 있거나 객체가 아닙니다"라는 오류 메시지를 표시합니다.
기본 결론은 프라이빗 메서드는 선언 및 할당된 후 클래스 내 어디에서나 액세스할 수 있는 프라이빗 속성에만 액세스할 수 있다는 것입니다.

정적 변수:
정적 변수는 클래스 이름 + 이 속성에 액세스하여 클래스가 소유한 속성입니다. "."+정적 변수 이름을 사용합니다. 다음을 명확하게 설명할 수 있습니다.

function BasicInfo(name,age,from)  
{  
 this.name = name;  
 this.age = age;  
 this.from = from;  
}  
BasicInfo.generalInfo = "is 3zfp owned object";  
var basic = new BasicInfo("zfp",100,"ShenZhen");  
document.write(basic.generalInfo+"<br>");  
document.write(BasicInfo.generalInfo+"<br>");  
BasicInfo.generalInfo = "info is changed";  
document.write(BasicInfo.generalInfo+"<br>");

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

undefined 
is 3zfp owned object 
info is changed

다음 사항에 주의하세요.
1. 클래스 이름 + " 형식으로 정적 변수를 선언합니다. " + 정적 변수 이름 변수
2. 정적 변수는 클래스의 인스턴스 개체에 고유한 속성이 아니라 개체 간에 공유되는 속성입니다.
3. 인스턴스 개체 이름 + "." + 정적 변수 이름으로 액세스할 수 있습니다.

전역 변수:
전역 변수는 전체 시스템이 작동하는 동안 효과적인 액세스 제어가 가능한 변수입니다. 일반적으로 다음과 같이 js 코드 시작 부분에 정의됩니다.

var copyright = "3zfp owned";  
var foo =function()  
{  
 window.alert(copyright);  
}

다음 사항에 주의하세요.
1. 변수가 var로 선언되지 않으면 전역 변수로 간주됩니다. 예:

var copyright = "3zfp owned"; 
var foo =function(fooInfo) 
{ 
 _foo = fooInfo; 
document.write(copyright+"<br>"); 
} 
new foo("foo test"); 
document.write(_foo+"<br>"); 
执行代码,将得到如下结果: 
3zfp owned 
foo test 
但是,这个又有一个注意的地方,function是编译期对象,也就是说_foo这个全局变量要在foo对象被实例化后才能被初始化,也就是说如果将 
new foo(); 
document.write(_foo+"<br>"); 
对调成 
document.write(_foo+"<br>"); 
new foo(); 
系统将提示 "_foo 未定义"。

2 다음과 같이 전역 변수와 동일한 이름으로 지역 변수 속성을 정의하는 경우:

var copyright = "3zfp owned";  
var foo =function(fooInfo)  
{  
 var copyright = fooInfo; //同名变量  
 this.showInfo = function()  
 {  
 document.write(copyright+"<br>");  
 }  
}  
new foo("foo test").showInfo();  
document.write(copyright+"<br>");

코드를 실행하면 다음과 같은 결과가 나타납니다.
3zfpowned
foo test
The 이유는 컴파일 중에 함수가 완료되기 때문입니다. 변수의 정의, 즉 foo 내의 copyright 정의는 컴파일 중에 완료되며 그 범위는 foo 객체 내에서만 유효하며 외부에서 정의된 전역 변수 copyright와는 아무런 관련이 없습니다. .

위 내용은 JavaScript 변수 유형을 사용하는 몇 가지 기술에 대해 논의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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