function fn() {
rank = function() {
alert("盖伦")
}
console.log(this);
return this
}
fn.rank = function() {alert("赵信")}
fn.prototype.rank = function() {alert("典韦")}
var rank = function() {alert("项羽")}
function rank() {alert('琴女')}
fn.rank()
rank()
fn().rank()
rank()
new fn.rank()
new fn().rank()
new new fn().rank()
首先预编译由优先级顺序先找实参,但是不是在函数的环境中首先排除
然后再找var提升声明
var 项羽
再找函数体,进行函数提升
function fn(){“盖伦”}
function fn(){“琴女”}
最后运行代码
fn.rank = function() {alert("赵信")}
fn.prototype.rank = function() {alert("典韦")}
var rank = function() {alert("项羽")}
fn.rank()就近寻找 打出"赵信"
rank()就近寻找 打出"项羽"
fn().rank()
运行fn()返回window ,并且赋给window.rank(盖伦)
window.rank() 打出"盖伦"
rank() ==>window.rank() 打出"盖伦"
new fn.rank()
已知符号优先级是:() > 成员访问|new 带参 > new 无参|函数调用
new (fn.rank) ()
fn.rank() ==>赵信
打出"盖伦"
(new fn()).rank()
打出"典韦"
new ((new fn()).rank)()
打出"典韦"