네가 모르는 자바스크립트 독서 노트
의 3단계var a = 1;
:var,a,=,2,;eval
:eval() 함수는 문자열을 매개 변수로 받아들이고 그 내용을 쓸 때 프로그램에 존재하는 이 위치에 있는 코드로 간주합니다.function foo(str, a){
eval(str);
console.log(a,b)
}
var b = 2;
foo("var b = 3;", 1)
// b,
with
: with는 보통 같은 대상의 여러 속성을 중복 인용하는 더 빠른 방법eg:var obj = {
a:1,
b:2
}
obj.a = 2;
obj.b = 3;
:
with(obj){
a:2;
b:33;
}
//
으로 간주된다. with는 한 속성이 없거나 여러 속성이 있는 대상을 완전히 격리된 어법 작용역으로 처리할 수 있기 때문에 이 대상의 속성도 이 작용역에 정의된 어법 표식자로 처리된다.그러나 이 블록 내부의 정상적인 var 성명은 이 블록의 작용역에 제한되지 않고 with가 있는 함수 작용역에 추가되기 때문에 새로운 문제가 발생하여 변수가 유출될 수 있습니다.
에서 함수 작용역의 의미는 이 함수에 속하는 모든 변수를 전체 함수의 범위 내에서 사용하고 복용할 수 있다는 것을 의미한다(또는 끼워 넣은 작용역에서도 사용할 수 있다).
의 이용: 임의의 코드 세그먼트 외부에 포장 함수를 추가하면 내부의 변수와 함수를'숨김'으로 정의할 수 있고 외부 작용역은 포장 함수 내부의 어떤 내용도 접근할 수 없다.(function foo(){...})
, 함수 표현식으로서foo는...대표하는 위치에서 방문되면 외부 작용역은 안 되고 장점은 외부 작용역을 오염시키지 않는다는 것이다(function foo(){
...
})()
var a = 2;
(function IIFE(global){
var a = 3;
console.log(a);
console.log(global.a);
})(window);
console.log(a);
윈도우 대상의 인용을 전달하지만 형삼을 글로벌이라고 명명하기 때문에 코드 스타일에서 전역 대상에 대한 인용은'전역'이 없는 변수를 인용하는 것보다 더욱 뚜렷하다.for(var i =0; i<10; i++){
...
}//i
with
는 블록 작용역의 한 예이다!!!대상에서 with를 사용하여 만든 역할 영역은 외부 역할 영역이 아닌 with 성명에서만 유효합니다.try/catch
,try/catch의catch분구는 블록 작용역을 생성하는데 그 중 성명된 변수는catch 내부에서만 유효합니다tyr{
undefined();//
}
cathc(err){
console.log(err)//
}
console.log(err);//ReferenceError:err not found
let
,let 키워드는 변수를 존재하는 임의의 역할 영역에 귀속시킬 수 있다. 즉,let이 성명한 변수
에 블록 역할 영역을 만들면if에서let로 성명한 변수가 전체 역할 영역을 오염시키지 않는다. 그러면 어떻게
블록을 만듭니까?
면 돼요.if(foo){
{
let bar = foo * 2;
bar = something(bar);
console.log(bar)
}
}// , , {...} let
let , let , let
const
도 블록 작용역 변수를 만들 수 있지만 그 값은 고정적(상량)a = 2;
var a;
console.log(a);// 2
*=================*
console.log(a); // undefined
var a = 2;
!
foo();
var foo = function(){
...
}// ,TypeError
function foo(){
var a = 2;
function bar(){
console.log(a);
}
return bar;
}
var baz = foo();
baz();//2-- !!!
함수bar()는foo()의 내부 작용역에 접근한 다음bar() 함수 자체를 하나의 값 형식으로 전달하고foo()가 실행되면 그 반환값은 변수baz에 부여하고baz()를 호출할 수 있으며 실제로는 서로 다른 식별자를 통해 내부 함수bar()를 호출할 뿐이다.
bar() 。
foo()가 실행된 후에 보통foo()의 전체 내부 작용역을 소각하지만 클로즈업은 소각을 막을 수 있다. 즉foo()의 내부 작용역이 아직 있고 bar() 자체가 인용하고 있는데 이 인용은 클로즈업이다.for(var i=1; i<=5; i++){
setTimeout(function timer(){
console.log(i);
}, i*1000);
}
출력의 결과는 다섯 개의 6이고 주파수는 1초이다. 왜 그런가???
for(var i=1; i<=5; i++){
(function(j){
setTimeout(function timer() {
console.log(j);
},j*1000);
})(i);
}
출력의 결과는 매초에 한 개의 숫자를 출력하는데 각각 1, 2, 3, 4, 5이다. 이것은 또 왜???
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.