js执行优先级 + 测试题
参考链接:mdn 优先级操作符
执行优先级由高到低:
19 优先级
- 分组:(…)
18 优先级
-
成员访问 a.b
- 需计算的成员访问 a[b]
- new 带参数列表 new foo()
- 函数调用 fun(a)
- 可选链 a?.b
17 优先级
- new 无参数列表 new foo
小括号(xxx) > 属性访问. > new foo() 带参数 > 函数调用foo() > new foo 无参数
function getName(){ console.log(1) }
function Foo() {
this.getName = function () { console.log(2) }
return this;
}
Foo.getName = function () { console.log(3) }
var a = new Foo.getName();
// 该行等于 new (Foo.getName)(),3
// 先 Foo.getName - 再 new (Foo.getName)(),将 Foo.getName 作为构造函数,打印3 - a={}
var b = new Foo().getName();
// .属性调用优先级比 new 构造函数() 高,所以该行等于(new Foo()).getName(),打印 2
// 先 new Foo(),Foo 是构造函数,创建新对象 - 再调用该对象的 getName 执行 - b 为 undefined
var c = new new Foo().getName();
// 该行等于new (new Foo().getName)(),2
// 先 new Foo(),创建新对象 - 再获取该对象的getName - new调用这个 getName 创建一个新对象赋值给 c={}
//再举个栗子
new Date().getTime(); // 等于((new Date()).getTime)()
(new Date).getTime(); // 等于((new Date()).getTime)()
new Date.getTime(); // 等于new (Date.getTime)() - Uncaught TypeError: Date(...).getTime is not a function;
####