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

歡迎訪問 生活随笔!

生活随笔

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

javascript

javascript高程3 学习笔记(三)

發布時間:2023/12/4 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript高程3 学习笔记(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

執行環境

執行環境是什么?

  • javascript的解釋器每次開始執行一個函數時,都會為每個函數創建一個執行環境(execution context)。
  • 執行環境定義了變量或者函數有權訪問的其他數據,決定了他們各自的行為。
  • 與執行環境相關的變量對象(ariable object)中有執行環境定義的所有變量和函數

作用域鏈

  • 代碼在一個環境中執行,便會創建變量對象的一個作用域鏈(scope chain)。
  • 作用域鏈的作用是,保證對執行環境有權訪問的所有變量和函數的有序訪問
  • 如果環境是函數,則其活動對象(active object)為環境變量
  • 活動對象最開始含有一個變量,名為arguments對象(該變量全局中不存在)
  • 作用域鏈的下一個對象來自包含對象,再下一個對象來自下一個包含環境...
  • 標識符的解析是沿著作用域鏈逐級向上搜索標識符的過程
  • 通過try catch/with 來延長作用域
  • 沒有塊級作用域(類C的花括號)

代碼示例

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;// 能訪問 color和anotherColor,tempColor} // 能訪問 color和anotherColorswapColor();alert(color);alert(anotherColor); } // 能訪問 color changeColor(); alert(color); alert(anotherColor); //不能被訪問到 undefined<pre><code><br />####js 垃圾回收 Garbage Collection(GC) &gt; - javascript具有自動垃圾回收機制 - 兩種策略,標記清除和引用計數 ?- 標記清除(較為常見),第一遍標記所有變量,第二次標記待清除變量 - 引用計數,通過檢測變量引用次數的值判定是否變量可以被回收,問題是存在循環引用問題####Function 類型 &gt; - 每個函數都是Function類型的實例 - 函數是對象,具有屬性和方法,函數名實際上便是指向函數對象的指針 - 函數定義的三種方式 - 函數沒有重載,后定義的會覆蓋之前的 - 將函數名作為變量進行傳參 - 函數的兩個內部屬性**`arguments`**和**`this`**還有一個**`caller`** - 函數的屬性(有個疑問,和內部屬性什么區別么),兩個`length`(參數個數)和`prototype` - 兩個非繼承方法`apply()` `call()`####代碼示例 *函數的三種定義方式* </code></pre>// 函數定義的三種方式 // 函數聲明 function sum(num1,num2){return num1 + num2; }// 函數表達式 var sum = function(num1,num2){return num1 + num2; };// 使用Function構造函數 兩次代碼解析性能慢 不推薦 var sum = new Function("num1","num2","return num1 + num2");<pre><code>?*函數聲明提升(function declaration hositing)* </code></pre>// 可以訪問sum alert(sum(10,10)); function sum(num1,num2){return num1 + num2; }// 函數表達式則不行 alert(sum1(10,10)); var sum1 = function(num1,num2){return num1 + num2; }<pre><code>這是因為解析器在向執行環境加載數據時候,對于函數聲明和函數表達式,解析器會率先讀取函數聲明,使其在任何代碼之前可用(可以訪問) *作為值的函數,函數名做為變量進行傳參* </code></pre>function callSomeFunction(someFunction,someArgument){return someFunction(someArgument); }function add10(num1){return num1 + 10; }var result = callSomeFunction(add10,10); alert(result);<pre><code><br />*函數的內部屬性* arguments對象上一篇筆記提及,類數組對象包含傳入函數的所有參數 arguments對象擁有一個名為 `callee`的屬性,該屬性是一個指針,指向arguments對象的函數 它的作用: </code></pre>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<pre><code>`callee`作為指針的用法,解除了函數體內代碼和函數名的耦合 **`this`**(很重要,要理解掌握) this引用的是函數據以執行的環境對象或者說是this值(全局作用域調用函數時,this指向的引用就是window) </code></pre>window.color = "red";var o = {color:"blue" }; function sayColor(){alert(this.color); }sayColor();o.sayColor = sayColor; // 函數名是指向函數的指針 o.sayColor();<pre><code>可以通過調試代碼,查看當前所在的this指向的環境對象 **疑問:如果window.color 直接寫color/var color,不是應該也是指向全局的么,為什么會報undefined***兩個非繼承的方法apply() call()* </code></pre>// 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]; //或者傳入數組 } alert(callSum(10,10)); function callSum(num1,num2){return sum.call(this,num1,num2); } alert(callSum(10,10));<pre><code>?*apply()和call() 的作用在于 擴充函數作用域(不明覺厲)* </code></pre>window.color = "red"; var o = {color:"blue" }; function sayColor(){alert(this.color); }var objectSayColor = sayColor.bind(o); // bind方法 傳入對象o objectSayColor();sayColor(); sayColor.call(this); sayColor.call(window); sayColor.call(o);

小結

  • 執行環境的概念
  • 什么是作用域,作用域鏈的作用
  • 函數是個對象,有相應的屬性和方法
  • 前面的哪個疑問 是什么原因?
  • 總結

    以上是生活随笔為你收集整理的javascript高程3 学习笔记(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 初音未来打屁股 | 欧美成人一区二区三区四区 | 欧美乱论 | jizzjizzjizz国产 | 亚洲啪| 国产黄色三级网站 | 午夜影院免费看 | 国产欧美一区二区三区精华液好吗 | 亚洲jizzjizz日本少妇 | 亚洲av片在线观看 | 欧美黄色片网站 | www.男女 | 日本在线视频一区二区三区 | 欧美成人一区在线观看 | 三级a做爰全过程 | 午夜在线看片 | 欧美精品乱码99久久蜜桃 | 亚洲一区二区三区四区不卡 | 欧美乱轮视频 | 中文字幕在线播放av | 性饥渴的农村熟妇 | 欧美一区中文字幕 | 欧美色呦呦 | 日韩女优在线播放 | 91精品在线免费 | 欧美不卡高清 | 色婷婷久| 歪歪6080 | 91叉叉叉 | 亚洲午夜精品久久久久久app | 粉嫩视频在线观看 | 免费成人av片 | 美女高潮流白浆视频 | 最新av免费观看 | 国产精品无码av在线播放 | 国产精品熟女一区二区不卡 | 筱田优全部av免费观看 | 欧美一级夜夜爽 | 国产黄色大片网站 | 日本a一级片 | 欧美日韩色| 一女被多男玩喷潮视频 | 欧美日韩国产中文 | 国产在线一区二 | 色戒在线免费 | 婷婷丁香在线 | 国产肉体ⅹxxx137大胆 | 国产高清久久久 | jizz教师| 国产亚洲欧美精品久久久久久 | 精品久久久一区二区 | 无码国产精品一区二区免费16 | 色老板精品凹凸在线视频观看 | 蜜臀99久久精品久久久久小说 | 日韩亚洲欧美精品 | 国产美女免费 | 日韩精品大片 | 大地资源影视在线播放观看高清视频 | 色欧美片视频在线观看 | 亚洲欧美另类在线观看 | 小柔的淫辱日记(1~7) | 肉嫁高柳家 高清 | 国产免费av片在线观看 | 99在线视频播放 | 亚洲美女高潮久久久 | 成人wwwww免费观看 | 日韩av少妇 | 91蜜桃网 | 黄色av小说在线观看 | 在线观看h网站 | 永久免费的网站入口 | 亚洲三级黄色片 | 中文字幕资源在线 | 91猎奇在线观看 | 黄色大片在线播放 | 热热色原网址 | 美女自卫网站 | 蜜桃视频污在线观看 | 伊人日本 | 69福利区| 中文在线观看免费高清 | 手机看片久久久 | 综合第一页 | exo妈妈mv在线播放高清免费 | 99色99| 国产精品女人和拘 | 激情六月婷婷 | 涩涩爱在线 | 欧洲美女与动交zozzo | 国产精品久久久久久中文字 | 嫩草精品| 国产真实交换夫妇视频 | 亚洲欧美亚洲 | 美女狂揉羞羞的视频 | 依依成人在线视频 | 日韩欧美国产一区二区在线观看 | 日韩爽爽视频 | 国产嫩草在线观看 | 日韩精品国产AV |