记录一下自己遇到的一些js题目
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript谜题</title>
</head>
<body>
</body>
</html>
<script>
//--------------------------------------
(function() {
return typeof arguments;
})()
//---- "object"
//---------------------------------------
var f = function g() {
return 1;
}
typeof g() //----"Uncaught ReferenceError: g is not defined"
//----------------------------------------
(function (x) {
delete x;
return x;
})(1)
// ------ "1", delete只能删除对象的属性,这里x是变量
//--------------------------------------------------
var y = 1, x = y = typeof x;
x // ----- "undefined"
//----------------------------------------------------
(function f(f) {
return typeof f()
})(function(){ return 1})
// ------- "number"
// ----------------------------------------------
var foo = {
bar: function () {
return this.baz;
},
baz: 1
}
(function () {
return typeof arguments[0]();
})(foo.bar);
// --- "undefined"
//-----------------------------------------------------
var foo = {
bar: function () {
return this.baz;
},
baz: 1
}
typeof (f = foo.bar)();
// ----- "undefined"
//----------------------------------------------------
var f = (function f() { return 1; }, function g() { return 2; })();
typeof f;
//------- "number"
//---------------------------------------------------
var x = 1;
if( function f() {} ) {
x += typeof f;
}
x
//----- "1undefined"
// if、while、for语句中,因为块只能包含语句(代码块),
// 因此if()中的f函数不能当函数声明,当成表达式使用,可以认为是执行了
//if (f = function () {}) f-->"undefined"
//----------------------------------------------------------
var x = [typeof x, typeof y][0];
typeof typeof x;
//---- "string"
//-------------------------------------------------------
(function (foo) {
return typeof foo.bar;
})({ foo: { bar: 1 }})
//-------"undefined" , foo = { foo: {bar: 1}} foo里没有bar属性
//----------------------------------------------------------
function f() {
return f;
}
new f() instanceof f;
// false , new f()返回的是f自身
//---------------------------------------------------------------
var length = 10;
function fn () {
console.log(this.length);
}
var obj = {
length: 5,
methods: function (fn) {
fn();
arguments[0]();
}
}
obj.methods(fn, 1);
// ---- 10 , 2
//------------------------------------------------------
var foo = { n:1 };
(function (foo) {
console.log(foo.n);
foo.n = 3;
var foo = { n: 2 };
console.log(foo.n);
})(foo);
console.log(foo.n);
//----->>
var foo = { n:1 };
(function (foo) { //形参foo同实参foo一样指向同一片内存空间,这个空间的n值为1
var foo; //优先级低于形参
console.log(foo.n); //输出1
foo.n = 3; //形参与实参foo指向的内存空间的n被改为3
foo = { n: 2 }; //形参foo指向新的内存空间,里面的n的值为2
console.log(foo.n); //输出新的内存空间的值
})(foo);
console.log(foo.n); //实参foo的指向还是原来的内存空间,里面的n的值为3
//------------------------------------------------------
var obj = {};
obj.log = console.log;
obj.log.call(console, this);
//-----------"window" ----> console.log.call(console, this)输出console的上下文
</script>