日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript谜题

發布時間:2024/4/17 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript谜题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

測試一

if(!("a"?in?window))?{
????
var?a?=?1;
}
alert(a);

測試二

var?a?=?1,
????b?
=?function?a(x)?{
????????x?
&&?a(--x);
????};
alert(a);

測試三

function?a(x)?{
????
return?x?*?2;
}
var?a;
alert(a);

測試四

function?b(x,?y,?a)?{
????arguments[
2]?=?10;
????alert(a);
}
b(
1,?2,?3);

測試五

function?a()?{
????alert(
this);
}
a.call(
null);

?

?

?

?

?

----------------------------------------------------------------- 答案分水嶺 ------------------------------------------------------------------

?

?

?

?

答案:

1.?undefined
2.?1
3.?function?a(x)?{?return?x?*?2;?}
4.?10
5.?window

?

講解:

第一題

if?(!("a"?in?window))?{
????
var?a?=?1;
}
alert(a);
這段代碼用語言描述就是
"如果window沒有屬性a,那么定義a等于1".?也許有人就會認為結果是1了.但測試
才會發現彈出的是undefined.這是問什么呢
?
這個問題考察以下兩點:
1)?所有的全局變量都是window的屬性.?var?a?=?1實際上相當于window.a?=?1.?所以你可以使用
"variable-name"?in?window來檢測一個全局變量是否被定義.

2)?所有被var的變量聲明?都要被提到作用域的頂部.考慮一個簡單的例子:
alert(
"a"?in?window);
var?a;
這個結果會彈出true;盡管變量定義在后面.?這是因為javascript引擎首先掃描定義的變量并把他的作用域提到頂部.?所以上面的代碼近似于這樣:
var?a;
alert(
"a"?in?window);
讀這段代碼,你就會更清楚為什么彈出的是true.

3)?你需要知道咱們測試例子?當變量作用域定義并提前了.但卻并沒有初始化.下面這句是定義變量并初始化
var?a?=?1;
你可以分開看定義變量和初始化:
var?a;?//定義
a?=?1;?初始化
但JS引擎解析一個合并的var?a?
=?1;是自動將其分離的.所以可以將定義被提前.但為什么值不提前呢??因為值會影響到后面的值而導致不可預知的結果出現.

所以.知道了上面這三點.重新思考下剛才的例子.其實就可以分解為
var?a;
if?(!("a"?in?window))?{
????a?
=?1;
}
alert(a);
這樣就可以看出if檢測的時候a已經被定義了?默認為undefined所以分支不會走?最后彈出了
'undefined'

第二題

var?a?=?1,
????b?
=?function?a(x)?{
????????x?
&&?a(--x);
????};
alert(a);

這個例子看上去要比實際復雜.這個結果顯示1.?主要是看哪個a最后被實例化了.這個問題也需要搞清3個知識點.

1)?就是定義的變量作用域被提前.這個在實例1已經講解了.

2)?就是所有的function定義的作用域也隨著var變量定義一起提前.但必須搞清楚的是.一個函數定義是這樣子的:
function?functionName(arg1,?arg2){
????
//function?body
}
這個要區別于函數表達式.函數表達式是賦予一個變量,是這樣的:
var?functionName?=?function(arg1,?arg2){
????
//function?body
};
要搞清楚的是.函數表達式不會作用域提前.這樣應該意識到.如果將value初始化值,從代碼的一段移到另一段會產生影響.

3)?就是要必須理解記住函數聲明重寫的是變量聲明.但不是變量初始化.理解這句話考慮下面的例子
function?value(){
????
return?1;
}
var?value;
alert(
typeof?value);????//"function"
盡快變量聲明在函數聲明的后面.但函數聲明會吧優先權讓給變量聲明.但是經過變量初始化你將會得到不同的結果
function?value(){
????
return?1;
}
var?value?=?1;
alert(
typeof?value);????//"number"
因為value?=?1變量賦值的時候又覆蓋了?函數聲明?所以變成了1

回歸到咱們的測試題?其實可以簡化成下面這樣:
var?a?=?1,
????b?
=?function(x)?{
????????x?
&&?b(--x);
????};
alert(a);
顯而易見?就是彈出1

第三題

function?a(x)?{
????
return?x?*?2;
}
var?a;
alert(a);
如果理解了前面的兩個實例那么這個就很容易理解了.
var?a;作用域被提前?然后函數a將其覆蓋.?由于沒有a變量賦值,?所以最后彈出了整個函數的source

第四題

function?b(x,?y,?a)?{
????arguments[
2]?=?10;
????alert(a);
}
b(
1,?2,?3);
這個例子在所有瀏覽器里都顯示10.
原因.首先放上ECMA對arguments的說明.
ECMA
-262,?3rd?Edition,?section?10.1.8?says?about?an?arguments?object:

For?each?non
-negative?integer,?arg,?less?than?the?value?of?the?length?property,?a?property?is?created?with?name?ToString(arg)?and?property?attributes?{?DontEnum?}.?The?initial?value?of?this?property?is?the?value?of?the?corresponding?actual?parameter?supplied?by?the?caller.?The?first?actual?parameter?value?corresponds?to?arg?=?0,?the?second?to?arg?=?1,?and?so?on.?In?the?case?when?arg?is?less?than?the?number?of?formal?parameters?for?the?Function?object,?this?property?shares?its?value?with?the?corresponding?property?of?the?activation?object.?This?means?that?changing?this?property?changes?the?corresponding?property?of?the?activation?object?and?vice?versa.

尤其最后這一句
This?means?that?changing?
this?property?changes?the?corresponding?property?of?the?activation?object?and?vice?versa.
當arguments的屬性值改變那么活動對象的對應屬性也跟著變.反之亦然.
簡而言之就是arguments的屬性和相對性對象的屬性?是值共享的?兩者總是保持著相同的值.

所以由于arguments[
2]?=?10了?所以對應的活動對象屬性也為10.

第五題

function?a()?{
????alert(
this);
}
a.call(
null);
這個其實理解起來沒那么難.我們需要了解兩個知識點.
1)?應該理解this的值是怎么確定的.當一個對象的方法被執行.this就指向該方法的擁有者這個對象.如
var?object?=?{
????method:?
function()?{
????????alert(
this?===?object);????//true
????}
}
object.method();?
在上面的代碼里.當object.method()被執行時.this最終指向object.在全局環境里this指向window(當然如果非瀏覽器對象就指向默認的宿主).所以當一個函數不屬于一個對象的屬性是?那么this就等于window
function?method()?{
????alert(
this?===?window);????//true
}
method();?
上面的this就指向了全局的對象?window.

2)?有了(1)的知識做基礎.我們再需要的就是知道第二個重要的點.call做了什么.call()方法執行函數.比如另一個對象的方法.?這個方法的this將被call的第一個函數代替,然后其余的參數就按順序傳入到那個方法中.
function?method()?{
????alert(
this?===?window);
}
method();????
//true
method.call(document);???//false
此時call是method內部的this指向了document所以返回false.
**An?interesting?part?of?ECMA-262,?3rd?edition?describes?what?should?happen?when?null?is?passed?in?as?the?first?argument?to?call():

If?thisArg?is?
null?or?undefined,?the?called?function?is?passed?the?global?object?as?the?this?value.?Otherwise,?the?called?function?is?passed?ToObject(thisArg)?as?the?this?value.
所以call(或者apply)如果傳入null.將默認為全局對象.即瀏覽器的window或者其它的宿主環境.所以例子可以改寫為:
function?a()?{
????alert(
this);
}
a.call(window);
這樣結果就會顯示window.

轉載于:https://www.cnblogs.com/linpengfeixgu/articles/1658380.html

總結

以上是生活随笔為你收集整理的javascript谜题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费大片在线观看www | 亚洲精品国产欧美在线观看 | 国产精品资源 | 草的我好爽 | 四虎影院永久地址 | 国产免费观看久久黄av片 | 91精品国产综合久久香蕉 | 成人免费观看视频网站 | 俄罗斯精品一区二区三区 | 国精品一区 | 亚洲AV无码国产日韩久久 | 91成人精品国产刺激国语对白 | 激情黄色小说视频 | 美女被到爽高潮视频 | 日韩第一区 | 日韩欧美黄色片 | 99国产超薄肉色丝袜交足 | 色综合久久天天综合网 | 好吊操这里只有精品 | 无遮挡在线观看 | 11孩岁女毛片 | 奇米888一区二区三区 | 久久久久久中文字幕 | 激情五月视频 | 国产传媒一区二区三区 | 五月天婷婷视频 | 欧美一级一区二区三区 | 中文字幕人成乱码熟女香港 | 国产日韩欧美精品一区二区 | 99国产精品99久久久久久粉嫩 | 人人爽人人草 | 久久综合色视频 | 亚洲国产天堂 | 青青草免费在线 | 国产主播精品在线 | 欧美人成在线视频 | 偷偷在线观看免费高清av | 国产精品视频 | 农村妇女愉情三级 | 日本韩国视频 | 91成人免费版 | 男生吃小头头的视频 | 一区二区不卡av | 日本激情网 | 黄色资源在线播放 | 国产一线天粉嫩馒头极品av | 欧美一级免费在线 | 国产美女永久免费 | 91嫩草在线| 亚洲伦理在线视频 | www黄色av | 久久嫩草精品久久久久 | 欧美大胆视频 | 日本不卡在线视频 | 欧美一区不卡 | 国产在线拍揄自揄拍无码 | eeuss日韩| 13日本xxxxxⅹxxx20| 17c一起操 | 少妇高潮喷水在线观看 | av中字| 久热一区| 人人草在线观看 | 日韩在线精品 | 久久精品视频在线播放 | 国产精品乱码一区二区 | 一级黄色在线观看 | 三级黄色在线视频 | 国产免费一区二区三区视频 | 男生和女生一起差差差视频 | 男女羞羞动态图 | 69网站在线观看 | 亚洲av区无码字幕中文色 | 久久久免费看片 | 66亚洲一卡2卡新区成片发布 | 熟妇人妻精品一区二区三区视频 | 亚洲成人一区二区在线观看 | 成人动漫av| 久久久久久亚洲中文字幕无码 | 天天曰天天干 | 久久久久久久久久久影视 | 美女av免费看 | 可以免费看的黄色 | 欧美三级不卡 | 国产精品毛片在线 | 最新中文字幕在线视频 | 我看黄色一级片 | 久久久精品人妻一区二区三区 | 久草综合在线 | 伊人导航 | 国内外成人激情视频 | 麻豆91在线观看 | 国产超碰av | 不卡精品视频 | 综合亚洲网 | 国产99久久九九精品无码 | 绯色av一区二区 | 久草观看视频 | 北条麻妃一区二区三区免费 |