javascript基本功002

一、賦值優先級前端

按從最高到最低的優先級列出JavaScript運算符。具備相同優先級的運算符按從左至右的順序求值。this

如最高到最低的優先級:spa

一道簡單的數學題
z = 78 * (96 + 3 + 45)
// 11232

如相同優先級的運算符按從左至右:prototype

    var o = {n:3};
    var g = o;
    o.x = o = {c:"abc"};

    // g {n:3,x:{c:"abc"}}
    // o {c:"abc"}
    // o.x undefined

這個還關聯到引用的問題,如開始時o與g是指向同一個堆內存地址, 而後因爲相同優先級的運算符按從左至右因此o.x的棧內存保存的堆內存地址尚未變,那麼o.x就先拿出地址後再到o={c:"abc"}指向code

新的堆內存地址,而因此g的對內存地址有變更,而o就指向了新堆內存地址,而後後面使用o.x是undefined的,由於上面賦值的o.x與下面獲取的o.x已經不是同一個堆內存地址了。對象

 

二、基礎細節內容例子blog

工做也好久了,以爲須要沉澱一下,由於如今前端的知識更新太快了,但基礎的更新是很慢的,而全部的知識更新都是對基礎知識的封裝而後更加便利的使用,因此基礎紮實纔是快速上手新東西的王道。ip

function Foo(){
    getName = function(){
        console.log(1);
    }
    return this;
}
Foo.getName = function(){
    console.log(2);
}
Foo.prototype.getName = function(){
    console.log(3);
}
var getName = function(){
    console.log(4);
}

function getName(){
    console.log(5);
}

Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
//輸出值爲多少

以上涉及到變量聲明提高、this指向、運算符優先級、原型、全局變量、對象屬性、原型屬性優先級。內存

對象屬性get

Foo.getName();
// 2

變量聲明提高

getName();
// 4

全局變量、this指向

Foo().getName();
// 1

全局變量

getName();
// 1

原型

new Foo.getName();
// 2

原型、原型屬性優先級

new Foo().getName();
// 3

運算符優先級

new new Foo().getName();
// 3
相關文章
相關標籤/搜索