下面是我平时收集的一些比较有意思的题目,记录并分享一下!!!
一、原型
第一题
var A = function(){
}
A.prototype.n = 1
var b = new A()
A.prototype = {
n:1,
m:3
}
var c = new A()
console.log(b.n, b.m, c.n, c.n) // 1 undefined 2 3
第二题
var F = function(){
}
Object.prototype.a = function(){
console.log("a()")
}
Function.prototype.b = function(){
console.log("b()")
}
var f = new F()
f.a() // a()
f.b() // 报错
F.a() // a()
F.b() // b()
二、执行上下文栈
第三题
console.log('gb' + i)
var i = 1
foo(1)
function foo(i){
if(i == 4){
return
}
console.log('fb' + i)
foo(i + 1);
console.log('fe' + i)
}
console.log('ge' + i)
// gbundefined fb1 fb2 fb3 fe3 fe2 fe1 ge1
三、变量提升
第四题
function a(){}
var a
console.log( typeof a ) // function
第五题
if(!(b in window)){
var b = 1
}
console.log(b) // undefined
第六题
var c = 1
function c(c){
console.log(c)
}
c(2) // 报错
三、作用域
第七题
var a = 1
function fn(){
console.log(a)
}
function print(){
var a = 2
fn()
}
print(fn)
// 1
三、闭包
第八题
var name = "window"
var obj = {
name: 'object',
getNameFunc: function(){
return function(){
return this.name
}
}
}
console.log(obj.getNameFunc()()) // window
###### 第九题
```js
var name = "window"
var obj = {
name: 'object',
getNameFunc: function(){
var that = this
return function(){
return that.name
}
}
}
console.log(obj.getNameFunc()()) // object
第十题
//(有难度)
function fun(n, o){
console.log(o)
return {
fun: function(m){
return fun(m,n)
}
}
}
var a = fun(0); // undefined
a.fun(1); // 0
a.fun(2); // 0
a.fun(3); // 0
fun(0).fun(1).fun(2).fun(3); // undefined 0 1 2
var C = fun(0).fun(1); // undefined 0
c.fun(2); // 报错
c.fun(3); // 报错
如果有什么不对的地方,或者不好的地方,还请指正