[TOC]
# 1. 函數閉包
閉包就是能夠讀取其他函數內部變量的函數,由于在 Javascript 語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成 **定義在一個函數內部的函數**。所以,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。
閉包的用途:
* 可以在函數外部讀取函數內部成員
* 讓函數內成員始終存活在內存中
示例:
```js
function fn () {
var count = 0
return {
getCount: function () {
console.log(count)
},
setCount: function () {
count++
}
}
}
var fns = fn()
fns.getCount() // => 0
fns.setCount()
fns.getCount() // => 1
```
思考1:
```js
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
console.log(this); // object
return function () {
console.log(this); // window
return this.name; // 而這里的this是window對象
};
}
};
console.log(object.getNameFunc()()); // The Window
```
思考2:
```js
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
var that = this;
console.log(this); // obeject
return function () {
console.log(this); // window
console.log(that); // object
return that.name;
};
}
};
console.log(object.getNameFunc()()); // My Object
```
# 2. 沙箱
示例1:
```js
//沙箱:環境,黑盒,---在虛擬的世界中,模擬真實世界的場景,做實驗,實驗的結果和真實世界的結果一樣,但是不會影響真實的世界
//沙箱可以解決命名沖突的問題
//以后的代碼--->盡可能的放在沙箱中
var num=100;
//沙箱的代碼
(function () {
var num=10; // 不與全局的num沖突
num++;
console.log(num);//11
})();
console.log(num);//100
```
示例2:
```js
//沙箱可以解決命名沖突的問題
(function () {
var x=10;
function f1() { // 與下面的f1不沖突
}
}());
(function () {
var x=10;
function f1() {
}
}());
```
- js應用場景
- js組成
- js書寫位置
- 浮點數精度問題
- undefined與null的區別
- 數據類型轉換
- 運算符優先級
- 代碼調試
- 函數
- 函數的定義和調用
- 函數的return細節
- 函數是一種數據類型
- this的指向
- 函數成員
- 函數閉包
- 作用域
- 預解析
- js對象
- 對象的創建與調用
- new關鍵字
- this關鍵字
- 構造函數創建對象
- 事件
- 數據類型
- 繼承
- 雜項
- 如何阻止標簽的默認行為
- 為一個標簽綁定或移除任何一個事件
- 如何阻止事件的冒泡行為
- 事件的三個階段
- 移動元素的條件
- 勻速動畫函數封裝
- 變速動畫函數封裝
- 獲取元素的css屬性值
- 數據類型判斷方法
- 創建對象的7種寫法
- 如何繼承
- 為js內置對象添加原型函數
- 將局部變量轉換為全局變量
- call函數的用法
- 沙箱
- 淺拷貝
- 深拷貝
- 對象賦值會改變對象
- 解析URL中的字符串
- 格式化日期
- 獲取當前瀏覽器類型
- Vue3.x
- 調式工具Vue Devtools