http://perfectionkills.com/javascript-quiz/
The following is my own understanding of these topics. If you have any different opinions or insights, please feel free to comment.
(function(){
return typeof arguments;
})();
This question is relatively simple, as long as everyone does not think that arguments are arrays, it will be fine.
The return is object.
var f = function g(){ return 23; };
typeof g();
Looking through the aiming book, you will find that there is a relatively complete explanation of function and several creation methods. This trap appears in many of the following questions. Be careful.
The return is undefined.
(function(x){
delete x;
return x;
})(1);
Javascript’s delete does not delete the object introduced or pointed to, but the object itself.
/*
Data
delete operator
Deletes an attribute from an object, or deletes an element from an array.
delete expression
The expression parameter is a valid JScript expression, usually an attribute name or an array element
So, the change of the formal parameters here has nothing to do with it.
*/
Regarding the specific analysis of delete, a garden friend gave the original explanation of that question part, but I was careless and didn’t read it, haha
http://perfectionkills.com/understanding-delete/
Return to 1.
var y = 1, x = y = typeof x;
x;
There is a little trap in this part. Haha.
x= undefined, as everyone knows. Then typeof x is actually typeof "undefined". Haha
Return Yes, of course it is a string.
(function f(f ){
return typeof f();
})(function(){ return 1; });
Well, the trap is here again. Haha. What is this f? ? It has nothing to do with the formal parameters, and you can’t get them.
So, there is no change in the formal parameters.
So, number is returned.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
This place . Mainly consider the context of this. What is passed in is foo.bar, not his parent.
So, return undefined .
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
With the above question, this question can be understood.
So, return undefined .
var f = (function f(){ return " 1"; }, function g(){ return 2; })();
typeof f;
Here, what is important is the return of (). () returns the last one.
Return Number.
var x = 1;
if (function f(){}) {
x = typeof f;
}
x;
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 처리가 어떻게 작동하는지 사람들에게 알릴 수 있습니다.