成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript高程3 學(xué)習(xí)筆記(三)

avwu / 1501人閱讀

摘要:與執(zhí)行環(huán)境相關(guān)的變量對(duì)象中有執(zhí)行環(huán)境定義的所有變量和函數(shù)作用域鏈代碼在一個(gè)環(huán)境中執(zhí)行,便會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈。

執(zhí)行環(huán)境

執(zhí)行環(huán)境是什么?

  

javascript的解釋器每次開始執(zhí)行一個(gè)函數(shù)時(shí),都會(huì)為每個(gè)函數(shù)創(chuàng)建一個(gè)執(zhí)行環(huán)境(execution context)。

執(zhí)行環(huán)境定義了變量或者函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù),決定了他們各自的行為。

與執(zhí)行環(huán)境相關(guān)的變量對(duì)象(ariable object)中有執(zhí)行環(huán)境定義的所有變量和函數(shù)

作用域鏈
  

代碼在一個(gè)環(huán)境中執(zhí)行,便會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈(scope chain)。

作用域鏈的作用是,保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn)

如果環(huán)境是函數(shù),則其活動(dòng)對(duì)象(active object)為環(huán)境變量

活動(dòng)對(duì)象最開始含有一個(gè)變量,名為arguments對(duì)象(該變量全局中不存在)

作用域鏈的下一個(gè)對(duì)象來(lái)自包含對(duì)象,再下一個(gè)對(duì)象來(lái)自下一個(gè)包含環(huán)境...

標(biāo)識(shí)符的解析是沿著作用域鏈逐級(jí)向上搜索標(biāo)識(shí)符的過(guò)程

通過(guò)try catch/with 來(lái)延長(zhǎng)作用域

沒(méi)有塊級(jí)作用域(類C的花括號(hào))

代碼示例
var color = "blue";

function changeColor(){
    if(color == "blue"){
        color = "red";
    }else{
        color = "blue";
    }
}
changeColor();
alert(color); // red
var color = "blue";

function changeColor(){
    var anotherColor = "red";

    function swapColor(){
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
  // 能訪問(wèn) color和anotherColor,tempColor
    }
// 能訪問(wèn) color和anotherColor
    swapColor();
    alert(color);
    alert(anotherColor);
}
// 能訪問(wèn) color 
changeColor();
alert(color);
alert(anotherColor);  //不能被訪問(wèn)到 undefined


####js 垃圾回收 Garbage Collection(GC) > - javascript具有自動(dòng)垃圾回收機(jī)制 - 兩種策略,標(biāo)記清除和引用計(jì)數(shù) ?- 標(biāo)記清除(較為常見),第一遍標(biāo)記所有變量,第二次標(biāo)記待清除變量 - 引用計(jì)數(shù),通過(guò)檢測(cè)變量引用次數(shù)的值判定是否變量可以被回收,問(wèn)題是存在循環(huán)引用問(wèn)題 ####Function 類型 > - 每個(gè)函數(shù)都是Function類型的實(shí)例 - 函數(shù)是對(duì)象,具有屬性和方法,函數(shù)名實(shí)際上便是指向函數(shù)對(duì)象的指針 - 函數(shù)定義的三種方式 - 函數(shù)沒(méi)有重載,后定義的會(huì)覆蓋之前的 - 將函數(shù)名作為變量進(jìn)行傳參 - 函數(shù)的兩個(gè)內(nèi)部屬性**`arguments`**和**`this`**還有一個(gè)**`caller`** - 函數(shù)的屬性(有個(gè)疑問(wèn),和內(nèi)部屬性什么區(qū)別么),兩個(gè)`length`(參數(shù)個(gè)數(shù))和`prototype` - 兩個(gè)非繼承方法`apply()` `call()` ####代碼示例 *函數(shù)的三種定義方式*
// 函數(shù)定義的三種方式 // 函數(shù)聲明 function sum(num1,num2){ return num1 + num2; } // 函數(shù)表達(dá)式 var sum = function(num1,num2){ return num1 + num2; }; // 使用Function構(gòu)造函數(shù) 兩次代碼解析性能慢 不推薦 var sum = new Function("num1","num2","return num1 + num2");
?*函數(shù)聲明提升(function declaration hositing)*
// 可以訪問(wèn)sum alert(sum(10,10)); function sum(num1,num2){ return num1 + num2; } // 函數(shù)表達(dá)式則不行 alert(sum1(10,10)); var sum1 = function(num1,num2){ return num1 + num2; }
這是因?yàn)榻馕銎髟谙驁?zhí)行環(huán)境加載數(shù)據(jù)時(shí)候,對(duì)于函數(shù)聲明和函數(shù)表達(dá)式,解析器會(huì)率先讀取函數(shù)聲明,使其在任何代碼之前可用(可以訪問(wèn))  

*作為值的函數(shù),函數(shù)名做為變量進(jìn)行傳參*
function callSomeFunction(someFunction,someArgument){ return someFunction(someArgument); } function add10(num1){ return num1 + 10; } var result = callSomeFunction(add10,10); alert(result);

*函數(shù)的內(nèi)部屬性* arguments對(duì)象上一篇筆記提及,類數(shù)組對(duì)象包含傳入函數(shù)的所有參數(shù) arguments對(duì)象擁有一個(gè)名為 `callee`的屬性,該屬性是一個(gè)指針,指向arguments對(duì)象的函數(shù) 它的作用:
function factorial(num){ if(num <= 1){ return 1; }else{ // return num * factorial(num - 1); return num * arguments.callee(num - 1); } } var trueFactorial = factorial; factorial = function(){ return 0; } alert(trueFactorial(5)); // 120 alert(factorial(5)); // 0
`callee`作為指針的用法,解除了函數(shù)體內(nèi)代碼和函數(shù)名的耦合  

**`this`**(很重要,要理解掌握)  
this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象或者說(shuō)是this值(全局作用域調(diào)用函數(shù)時(shí),this指向的引用就是window)  
window.color = "red"; var o = { color:"blue" }; function sayColor(){ alert(this.color); } sayColor(); o.sayColor = sayColor; // 函數(shù)名是指向函數(shù)的指針 o.sayColor();
可以通過(guò)調(diào)試代碼,查看當(dāng)前所在的this指向的環(huán)境對(duì)象  
**疑問(wèn):如果window.color 直接寫color/var color,不是應(yīng)該也是指向全局的么,為什么會(huì)報(bào)undefined**

*兩個(gè)非繼承的方法apply() call()*  
// apply() call() bind() function sum(num1,num2){ return num1 + num2; } function applySum(num1,num2){ return sum.apply(this,arguments); // 傳入arguments // return sum.call(this,[num1,num2]; //或者傳入數(shù)組 } alert(callSum(10,10)); function callSum(num1,num2){ return sum.call(this,num1,num2); } alert(callSum(10,10));
?*apply()和call() 的作用在于 擴(kuò)充函數(shù)作用域(不明覺(jué)厲)*  
window.color = "red"; var o = { color:"blue" }; function sayColor(){ alert(this.color); } var objectSayColor = sayColor.bind(o); // bind方法 傳入對(duì)象o objectSayColor(); sayColor(); sayColor.call(this); sayColor.call(window); sayColor.call(o);
小結(jié)
  

執(zhí)行環(huán)境的概念

什么是作用域,作用域鏈的作用

函數(shù)是個(gè)對(duì)象,有相應(yīng)的屬性和方法

前面的哪個(gè)疑問(wèn) 是什么原因?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91491.html

相關(guān)文章

  • javascript高程3 學(xué)習(xí)筆記(二)

    摘要:的理解函數(shù)與其他語(yǔ)言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型比如函數(shù)的形參有兩個(gè),但是調(diào)用函數(shù)傳入的參數(shù)可以寫一個(gè),三個(gè)或不寫參數(shù)對(duì)應(yīng)等,解析器都可以正常解析,這是因?yàn)橹袇?shù)在內(nèi)部是以一個(gè)數(shù)組形式來(lái)表示,故而不需要關(guān)系傳入?yún)?shù) ECMAScript function的理解 ECMAScript 函數(shù)與其他語(yǔ)言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型...

    JerryWangSAP 評(píng)論0 收藏0
  • javascript高程3 學(xué)習(xí)筆記(一)

    摘要:元素,當(dāng)瀏覽器不支持腳本數(shù)據(jù)結(jié)構(gòu)有如下中基本數(shù)據(jù)結(jié)構(gòu)操作符,用來(lái)檢測(cè)給定變量的數(shù)據(jù)類型結(jié)果都是,聲明沒(méi)初始化,使用生命變量但未對(duì)其進(jìn)行初始化的,默認(rèn)沒(méi)有進(jìn)行聲明,傳遞給函數(shù)會(huì)導(dǎo)致一個(gè)錯(cuò)誤,對(duì)于未聲明變量這么操作沒(méi)什么意義比如,也是返回。 javascript簡(jiǎn)史 微軟IE和網(wǎng)景在瀏覽器上的競(jìng)爭(zhēng) ECMAScript,由ECMA-262定義,提供核心語(yǔ)言功能 `ECMA 歐洲計(jì)算機(jī)制...

    you_De 評(píng)論0 收藏0
  • 讀“js高程筆記

    showImg(http://img3.douban.com/lpic/s8958650.jpg); 0x00 javascript組成 ECMAScript(-265)核心語(yǔ)言部分 DOM文檔對(duì)象模型(DOM1、2、3) BOM瀏覽器對(duì)象模型(提供與瀏覽器交互的接口和方法) 0x01 async 異步加載 執(zhí)行順序不定 charset defer 延遲加載,立即下載腳本但不執(zhí)行 src ...

    CollinPeng 評(píng)論0 收藏0
  • javascript高程章部分筆記

    摘要:標(biāo)識(shí)符按以下規(guī)則組合第一個(gè)字符必須是一個(gè)字母,下劃線或一個(gè)美元符號(hào)。包含值的變量和尚未定義的變量是不一樣的,例子報(bào)錯(cuò)然而,對(duì)未初始化的變量執(zhí)行操作符會(huì)返回值,對(duì)未聲明的變量執(zhí)行操作符統(tǒng)一也會(huì)返回值。 1. 語(yǔ)法 1.1 區(qū)分大小寫 變量、函數(shù)名和操作費(fèi)都區(qū)分大小寫。 1.2 標(biāo)識(shí)符 標(biāo)識(shí)符指變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)。標(biāo)識(shí)符按以下規(guī)則組合: 第一個(gè)字符必須是一個(gè)字母,下劃線...

    lentoo 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)(第版)學(xué)習(xí)摘錄上

    摘要:在這種情況下,函數(shù)在停止執(zhí)行后將返回值。這種用法一般用在需要提前停止函數(shù)執(zhí)行而又不需要返回值的情況下嚴(yán)格模式對(duì)函數(shù)有一些限制不能把函數(shù)命名為或不能把參數(shù)命名為或不能出現(xiàn)兩個(gè)命名參數(shù)同名的情況。 把近期看高程這本書做的筆記摘錄整理出來(lái)了,總歸對(duì)原生javascript理論有了一個(gè)比較全面的的認(rèn)識(shí),這次把書中的一些知識(shí)要點(diǎn)摘錄出來(lái)了,便于以后查閱的時(shí)候有方向,也更有效率??! 第一章、jav...

    leap_frog 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<