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

歡迎訪問 生活随笔!

生活随笔

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

javascript

JavaScript 函数(作用域以及闭包)

發布時間:2023/12/10 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 函数(作用域以及闭包) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JavaScript 函數(作用域以及閉包)

?

?執行環境及作用域

?

 執行環境定義了變量或函數有權訪問的其他數據。

? 每個執行環境都有一個與之關聯的變量對象,環境中定義的所有變量或函數都保存在這個對象中,

? 雖然我們編寫的代碼無法訪問這個對象,但解析器在處理數據時會在后臺使用它。

?

? 當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈。

? 作用域鏈的作用是保證對執行環境有權訪問的所有變量和函數的有序訪問;

? 作用域的前端始終是當前執行的代碼所在環境的變量對象。

?

?函數表達式

?

? 定義函數的兩種方式: 函數聲明和函數表達式

?

? 函數聲明的重要特征是函數聲明提升,及在執行代碼之前會先讀取函數聲明。

? sayHi();

? function sayHi() {

??????? ......

? }

?

?閉包

? 概念: 有權訪問另一函數作用域中的變量的函數。

?

function(value1, value2) {if(value1 < value2) {return -1;} else if(value1 > value2) {return 1;} else {return 0;} }var result = compare(5, 10);

?

?

? 閉包會攜帶包含它的函數的作用域,因此會比其他函數占用更多的內存。

?

? 另一個副作用: 閉包只能取得包含函數中任何變量的最后一個值。因為閉包所保存的是整個變量對象,而不是某個特殊的變量。

?

function createFunctions() {var result = new Array();for(var i=0; i<10; i++) {result[i] = function() {return i;};}return result; }

? 返回的函數數組中的每個函數的返回值都為10。

? 解決方案

?

function createFunctions() {var result = new Array();for(var i=0; i<10; i++) {result[i] = (function(num) {return function() {return alert(num);};})(i);}return result; }

?

?this對象

? 全局函數中,this等于window;

? 函數被作為某個對象的方法調用時,this等于那個對象;

? 匿名函數的執行環境具有全局性,this通常指向window。

?

var name = "The Window";var object = {name: "My Object",getNameFunc: function() {return function() {this.name;};} };alert(object.getNameFunc()());// 執行結果: The Window

? 第一步 object.getNameFunc()作為函數方法調用,this指向的是object;

? 第二步 object.getNameFunc()()作為匿名函數調用,this指向的是window;

?

轉載于:https://www.cnblogs.com/dreamerjdw/p/6233534.html

總結

以上是生活随笔為你收集整理的JavaScript 函数(作用域以及闭包)的全部內容,希望文章能夠幫你解決所遇到的問題。

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