이 질문은 비교적 간단합니다. 모든 사람이 인수를 배열이라고 생각하지 않는 한 괜찮습니다.
반환은 객체입니다.
객체에서 속성을 삭제하거나 배열에서 요소를 삭제합니다.
따라서 여기에서 형식 매개변수를 변경하는 것은 이와 관련이 없습니다.
1번으로 돌아갑니다.
이 부분에는 약간의 함정이 있습니다.
x= 정의되지 않은 경우에는 typeof가 실제로 typeof입니다. "정의되지 않음". ㅎㅎ
반환 물론 문자열입니다.
코드는 다음과 같습니다.
if에 있는 것들은 실제 존재(객체)이기 때문에 확실히 실행될 수 있습니다. null|underfined 객체는 if 아래에서 계속될 수 있습니다. 그러나 원칙적으로 f는 존재하지 않습니다. .
그래서 1undefine이 반환됩니다.
var x = [typeof x, typeof y][1];
typeof typeof x
여기서는 typeof y ,undefined입니다. 정의되지 않음"
"문자열"을 반환합니다.
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } })
헤헤, 여기요 작은 함정, 너무 빨리 보면 쉽게 들어갈 수 있습니다.
간략한 설명, var fo = {foo:{bar:1}} function(foo){})(fo) >return typeof foo.bar ==> fo.bar의 반환 유형
따라서 "정의되지 않음"을 반환합니다.
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
이 질문은 반환값에 대해서는 중요하지 않습니다. 이는 모든 함수를 구문 분석한 것입니다.
따라서 2를 반환합니다.
function f(){ return f; }
new f() instanceof f; 이 부분은 잘 이해가 안 되고, Bottle이 제시한 설명도 이해가 되는 것 같습니다
new f()는 새로운 객체가 아닌 f 자체를 가져오므로 f의 인스턴스가 아닙니다.
그래서 return. false.
with (function(x, undefine){}) length
with를 함수로 간주하면(alert와 동일) 이 길이는 다음과 같습니다. with의 형식 매개변수의 길이입니다.
2로 돌아갑니다.
아직 js에 관해 정리해야 할 문제가 많은 것 같습니다. Aiming은 큰 책이고 이 부분에 대한 설명은 매우 강력합니다. . 이는 사람들이 몇 가지 함정과 문제를 우회할 수 있게 해줍니다.
이러한 질문은 사람의 js 능력을 완전히 반영할 수는 없지만 최소한 js 처리가 어떻게 작동하는지 사람들에게 알릴 수 있습니다.