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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2017.4.07 js 中的function 实现的方式

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017.4.07 js 中的function 实现的方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數分為FD (函數定義),FE(函數表達式) ,函數構造器得到的函數
(1) ?FD 的栗子:
function getTaste(){
 .......
}
解析器遇到上面的function關鍵字,會解析上面的代碼為函數定義的情況,凡是不符合上述格式的,會報錯。
(2)FE的栗子:
var fn = function (){
  ......
}

解析器會把上面的function關鍵字解析為表達式的情況。本例中的function后面可有函數名字,但是僅限于函數定義內調用。外面調用會用fn。
var fn = function sbfn(){
  ......
  sbfn(); ?//
}

把function解析為表達式的情況,有另外的栗子:
1, function () {
  alert('anonymous function is called');
}();
此處為逗號運算符情況,取值逗號后面的結果undefined。

!function () {
alert('ECMAScript');
}();
此處為!運算符情況,后面結果返回undefined 。!取反,結果為true。

(3)函數構造器的栗子
其主要特點在于這種函數的[[Scope]]屬性僅包含全局對象(window)

var x = 10;

function f() {

var x = 20;
var y = 30;

var bar = new Function('alert(x); alert(y);');

bar(); // 10, "y" 未定義

}

f();
順便提醒一句,Function構造器既可使用new 關鍵字,也可以沒有,這樣說來,這些變體是等價的。

創建函數的算法

下面的偽碼描述了函數創建的算法(與聯合對象相關的步驟除外)。這些描述有助于你理解ECMAScript中函數對象的更多細節。這種算法適合所有的函數類型。

F = new NativeObject();

// 屬性[[Class]]是"Function"
F.[[Class]] = "Function"

// 函數對象的原型是Function的原型
F.[[Prototype]] = Function.prototype

// 醫用到函數自身
// 調用表達式F的時候激活[[Call]]
// 并且創建新的執行上下文
F.[[Call]] = <reference to function>

// 在對象的普通構造器里編譯
// [[Construct]] 通過new關鍵字激活
// 并且給新對象分配內存
// 然后調用F.[[Call]]初始化作為this傳遞的新創建的對象
F.[[Construct]] = internalConstructor

// 當前執行上下文的作用域鏈
// 例如,創建F的上下文
F.[[Scope]] = activeContext.Scope
// 如果函數通過new Function(...)來創建,
// 那么
F.[[Scope]] = globalContext.Scope

// 傳入參數的個數
F.length = countParameters

// F對象創建的原型
__objectPrototype = new Object();
__objectPrototype.constructor = F // {DontEnum}, 在循環里不可枚舉x
F.prototype = __objectPrototype

return F

注意,F.[[Prototype]]是函數(構造器)的一個原型,F.prototype是通過這個函數創建的對象的原型(因為術語常常混亂,一些文章中F.prototype被稱之為“構造器的原型”,這是不正確的)。

轉載于:https://www.cnblogs.com/FineDay/articles/6677283.html

總結

以上是生活随笔為你收集整理的2017.4.07 js 中的function 实现的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

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