第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一道考察運算符優(yōu)先級的JavaScript面試題? ???

一道考察運算符優(yōu)先級的JavaScript面試題? ???

青春有我 2018-10-10 09:11:39
先貼代碼哈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); } Foo.getName(); getName(); Foo().getName(); getName();new Foo.getName();new Foo().getName();new new Foo().getName();問題:頁面會彈出數(shù)字幾?以及為什么?麻煩前端er幫我解答一下,謝謝。運算符優(yōu)先級參考列表:MDN
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經(jīng)驗 獲得超7個贊

我個人是不太喜歡這種問題的,但需要解決這個問題確實需要一些基本功。一般來說,程序?qū)懚嗔?,自然記住了什么情況下會發(fā)生什么樣的事情,但是為什么會發(fā)生這樣的事情,可能問起來一時還真回答不了!

另外,我認為需要對這個問題平個反——它確實涉及到了運算優(yōu)先級。new 是運算符、成員訪問是運算(. 運算符)、函數(shù)調(diào)用是運算……而且題主也給出了 MDN 的鏈接,大家可以看到這個問題中的運算優(yōu)先級基本上集中 17、18、19 上,都是很高的優(yōu)先級。

https://img1.sycdn.imooc.com//5bf12cee000122b205760295.jpg

關(guān)于優(yōu)先級,這里需要說明的一點是,表中同一優(yōu)先級下的多個運算是沒有優(yōu)先順序的,通常是先遇到哪個就先運算哪個,所以說成員訪問優(yōu)先于 new xxx() 并無道理,但是成員訪問的確優(yōu)先于 new xxx——OK,這里遇到了我認為這個題中是難理解的地方:new Foo.getName() 和 new Foo().getName(),因為 new 的兩種形式有兩個不同的優(yōu)先級。

new 的兩種形式的運算,一個是帶括號的,稱為帶參數(shù)列表的 new,優(yōu)先級18;另一種是不帶括號的,稱為無參數(shù)列表的 new,優(yōu)先級 17。

所以,雖然 new Foo 是合法的構(gòu)造運算,但是 new Foo.getName() 卻是先運算了 Foo.getName 這個成員訪問運算。為什么呢?因為如果 new Foo 看作一個運算,它的優(yōu)先級是 17,低于成員訪問運算,所以應(yīng)該先計算 Foo.getName,對其計算結(jié)果再進行 new XXX() 運算。

其它問題都比較容易理解,我就懶得解釋了。希望大家在解決問題的時候盡量少帶情緒(我承認我也經(jīng)常帶情緒,但是俗話說:淡定!)


查看完整回答
反對 回復(fù) 2018-11-18
  • 1 回答
  • 0 關(guān)注
  • 716 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號