JavaScript 향상에 대한 허구 퀴즈
5810 단어 beginnersjavascript
Q: 대답하고 싶은 게 있어요.왜 이렇게 해요?이것은 무슨 절지의 허튼소리입니까?
sayMyNameSayMyName('Morty'); // 'I said your name, Morty.'
function sayMyNameSayMyName(name){
return `I said your name,${name}.`;
}
A:조립.Q:네,네,그런데 기중기는 도대체 뭐예요?
A:이런 이상한 현상을 정의하는 데 도움을 주기 위해 동명사를 사용해 보겠습니다.시작했어.ahem 성명, 변수든 함수든 프로그램의 맨 위로 올라갑니다.
Q: 네, 소화가 잘 돼요.어느 정도하지만 잠깐만...이게 원력으로 매달리면 안 된다고요?
sayMyNameSayMyName('Morty'); // TypeError: undefined is not a function
var sayMyNameSayMyName = function(name){
return `I said your name,${name}.`;
}
A:응, 봐봐, 신고하면 특별 대우를 받을 거야.숙제는 2등이라고 할 수 있다.그들은 매달릴 특권이 없다.Q: 그런데 왜요?
A:이것은 실행 컨텍스트입니다.이것이 원흉이다.
Q: 무엇을 수행합니까?
A:각 행 코드에는 컨텍스트가 있습니다.기억해야 할 두 가지 중요한 배경이 있다.전역과 함수 상하문이 있습니다.보아하니 이렇다.
/*Global--woohooo I'm freee*/
two(); // 2
function two(){
/*Function
========
*/
return 2;
}
Q:잠깐만요.언어 환경과 범위는 같다, 그렇지?A:한숨
젊은 절지무사, 너는 아직 배워야 할 것이 많다.아니오, 범위는 방문을 가리킵니다.변수가 전역적으로 선언되면 함수나 블록을 통해 접근할 수 있습니다.함수는 독각수이다. 왜냐하면 그들은 자신의 작용역을 만들기 때문이다.그러나 이것은 상하문과 다르다.
봐라, 우리는 모두 우리가 지구에서 왔다고 말할 수 있다.이것이 바로 우리의 전 세계적인 배경이다.그러나 우리는 모두 우리가 워싱턴 특구에서 왔다고 말할 수 없다.이것이 바로 함수 상하문이다.JavaScript에서는 키워드를 사용하여 현재 컨텍스트를 결정할 수 있습니다.
Q: 그럼 언어 환경과 조립은 어떤 관계가 있습니까?
A:네,그래서...
우선, 통역사가 외계인이라고 가정하면, 그는 너의 신호를 발견했고, 지금 너를 찾고 있다.외계인은 지구로부터 우리의 전 세계 환경을 시작할 것이다.지구상에는 일곱 개의 대륙이 있다.이것은 아마도 북미에서 시작되었을 것이다.
Q: 왜요?
A:북미의 기이한 기하학적 형상을 좋아해요.
어쨌든, 그것은 가능한 국가, 주, 도시, 거리를 포함하는 범위 체인을 만들 것이다.
이제 자바스크립트 해석기의 생각을 살펴보자.해석기가 코드를 읽을 때, 자동으로 전역 상하문으로 들어갑니다.
해석기는 우선 함수 호출 (신호) 을 찾아 외계인 검색 정책과 유사한 동작을 수행합니다.컨텍스트를 만들기 전에 (정보 찾기) 를 실행하지 않습니다.
해석기가 임무를 완성하려면 두 가지 단계를 거쳐야 한다. 그것이 바로 창설 단계와 집행 단계이다.
1) 우리는 창작 단계에 진입하고 있음을 주의하십시오.
하나의 함수는 여러 개의 함수를 포함할 수 있기 때문에 해석기는 범위 체인(국가, 주, 도시, 거리)을 초기화할 것이다.
다양한 매개 변수, 매개 변수, 함수/변수 설명을 저장하기 위해
this
을 생성합니다.그런 다음
variable object
을 작성하여 현재 컨텍스트를 저장합니다.이것은 너무 단순화되었다.우리는 그것을 더욱 간소화하고 해석기가 함수 성명과 변수 성명을 어떻게 처리하는지에만 관심을 기울일 것이다.
기능:
통역사의 코가 키워드
this
에 닿으면 이름을 찾습니다.그리고 이 함수 이름에 대한 인용을variables 대상에 저장합니다.변수:
해석기의 코가
function
, var
또는 변수와 관련된 모든 키워드에 닿으면 변수 이름을 먼저 변수 대상에 저장합니다.그리고 자동으로 undefined로 초기화합니다.너는 함수를 어떻게 변수에 분배하고 그것이 향상되기를 바라는 것이 작용하지 않는지 이해하기 시작할 수 있니?우리가
let
를 호출할 때, 해석기는 우리의 함수 표현식을 찾지만, 변수 이름만 읽고 정의되지 않은 값을 부여합니다.
sayMyNameSayMyName('Morty'); // 'I said your name, Morty.'
myNameIs('Morty'); // undefined
//
function sayMyNameSayMyName(name){
return `I said your name,${name}.`;
}
var myNameIs = function(name){
return `your name is,${name}.`;
}
다음 단계에서 당신은 이 점을 더욱 잘 알게 될 것입니다.2) 실행 단계
실행 단계에서 실행 상하문의 변수에 값을 할당합니다.
초기 호출
myNameIs(name)
의 문제는 해석기가 창설 단계에서 정의되지 않은 myNameis()
에 분배되었다는 것이다.함수 표현식 다음에 myNameIs()
를 호출하면 해석기는 실행 단계에서 전역 상하문에서 myNameIs()
값을 분배할 시간이 있습니다.호출
myNameIs()
이 유효한 이유는 성명 함수에 대한 인용이 창설 단계에 저장되어 있기 때문이다.코드가 실행될 때, 우리는 아무런 문제 없이 그것을 실행할 수 있다.결론
Q: 그래서...승진은 모두 집행 환경에 관한 것입니까?
A:네.
Reference
이 문제에 관하여(JavaScript 향상에 대한 허구 퀴즈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/howtocodejs/fictional-qa-about-javascript-hoisting-2ge2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(JavaScript 향상에 대한 허구 퀴즈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/howtocodejs/fictional-qa-about-javascript-hoisting-2ge2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)