Hibop.github.io icon indicating copy to clipboard operation
Hibop.github.io copied to clipboard

关于一道综合性js面试题

Open Hibop opened this issue 7 years ago • 3 comments

js难点汇总:

  • 变量定义提升
  • 函数定义和函数声明
  • this指针指向
  • 运算符优先级
  • 原型、继承
  • 全局变量污染
  • 对象属性及原型属性优先级
function Foo() {
    getName = function () { alert (1); };
    return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
 
//答案:1-7问
Foo.getName();//2
getName();//4
Foo().getName();//1
getName();//1
new Foo.getName();//2
new Foo().getName();//3
new new Foo().getName();//3

解析:

1问: 静态属性访问 2问: 函数定义和函数声明 3问: 函数执行后修改外层getName变量,然后返回this【非new】指向的是window 难度【4星】 4问: 联系3问重写 5问: 优先级 new (Foo.getName)() 实例化无this和返回值 函数 实际就是执行函数 6问: (new Foo()).getName() 实例化后有返回值 返回值分引用类型和基本类型 返回this和无返回值 最后都是返回的实例化对象 7问: 优先级new ((new Foo()).getName)();

参考: http://chuansong.me/n/1520504847015

Hibop avatar Feb 23 '18 14:02 Hibop

var a = 0,
	b = 0;
function A(a){
	A = function (b){
		alert(a + b++);
	}
	alert(a++);
}
A(1);
A(2);

result: 1 4

  1. 闭包, 第一次调用A时, A函数被重新赋值alert(a+b++);
  2. 在初始A中,形参a其实是局部变量, 当重置A函数新A调用原来局部变量a,构成闭包, a局部变量被保存。

Hibop avatar Feb 25 '18 14:02 Hibop

var n = 0;
function a(){
	var n = 1;
	function b(){
		n++;
		alert(n);
	}
	b();
	return b;
}

var clusure = a();
clusure();
alert(n);

result: 2 3 1

Hibop avatar Feb 25 '18 14:02 Hibop

var add = function (m) {
    var temp = function (n) {
        return add(m + n);
    }
    temp.toString = function () {
        return m;
    }
 
    return temp;
};
 
 
add(3)(4)(5); // 12
add(3)(6)(9)(25); // 43
  • 作用域;
  • 交替;
  • toString;

Hibop avatar Mar 13 '18 12:03 Hibop