불쌍 한 js 에 블록 급 역할 영역 이 없다 니.

1172 단어
js 에서 하나의 함수 에서 for 순환 을 정의 합 니 다. for (var i = 0; i < 5; i + +) 중의 i 는 for 순환 이 끝나 면 소각 되 지 않 습 니 다. i 는 이 함수 에 계속 존재 합 니 다. 이것 이 바로 js 와 다른 언어의 차이 입 니 다. 즉, js 는 블록 급 역할 도 메 인 이 없다 는 개념 입 니 다.다음 코드 보기:
function test(){
					for(var i=0;i<5;i++)
					{
						alert(i);
					}
					
					alert('last_i: '+i);
				}
				test();
 运行以上代码,执行for循环会弹出5次窗口分别为0,1,2,3,4。执行到4意味着for循环结束,其他语言下i就会销毁,执行alert(‘last_i:’ +i)按理说会为undefined,但js中不是,i会一直存在函数中,也就是说执行到alert(‘last_i :’ +i)时会弹出last_i: 5 。而这个5就是经过for循环累加后的i。 
    
   

怎样实现js的块级作用域呢?那就是匿名函数。在匿名函数中定义的任何变量都会在执行结束后销毁,这样就很类似其他语言中的for循环中的i在执行循环后销毁i。此处的匿名函数是要自执行的,也就是(function(){......})()这种形式,两个()(),前一个放函数体,后一个代表‘执行’的意思,就像普通的函数调用,当然了也可以放参数如:(函数体)(参数)。用匿名函数模仿块级作用域的代码如下:

function test(){
					(function(){       //                       
						for(var i=0;i<5;i++)
							alert(i);
					})()
					alert(i);//  ,   i
				}
				test();

이 때 익명 함수 에 있 는 for 순환 을 정의 합 니 다. 함수 단계 에서 i 를 없 애 면 코드 alert ('last i:' + i) 가 실 행 될 때 오류 가 발생 합 니 다.이렇게 하면 다른 언어의 블록 급 작용 역 과 같다.
다음으로 전송:https://www.cnblogs.com/chayangge/p/4288696.html

좋은 웹페이지 즐겨찾기