mirror of
https://github.com/KieSun/all-of-frontend.git
synced 2024-11-22 14:58:14 +08:00
Commit from GitHub Actions (markdown-autodocs)
This commit is contained in:
parent
cb842cd7a7
commit
1a996aa412
25
README.md
25
README.md
@ -119,6 +119,7 @@ JS 数据类型分为两大类及八种数据类型,注意别漏了 ES6 新增
|
|||||||
### 作用域
|
### 作用域
|
||||||
|
|
||||||
作用域是指程序中定义变量的区域,该位置决定了变量的生命周期,也就是变量和函数的可访问范围。
|
作用域是指程序中定义变量的区域,该位置决定了变量的生命周期,也就是变量和函数的可访问范围。
|
||||||
|
|
||||||
- [ ] 文档
|
- [ ] 文档
|
||||||
- [ ] [作用域](https://developer.mozilla.org/en-US/docs/Glossary/Scope)
|
- [ ] [作用域](https://developer.mozilla.org/en-US/docs/Glossary/Scope)
|
||||||
- [ ] [块作用域](https://developer.mozilla.org/en-US/docs/Glossary/Block/Scripting)
|
- [ ] [块作用域](https://developer.mozilla.org/en-US/docs/Glossary/Block/Scripting)
|
||||||
@ -146,25 +147,29 @@ JS 数据类型分为两大类及八种数据类型,注意别漏了 ES6 新增
|
|||||||
为什么会出现变量提升? 因为 JavaScript 在运行的时候会有 编译和和执行两个过程,在它编译的时候,会对全局进行搜索,所有的变量和函数声明会被移至其作用域的顶部,而其它的语句不会改变它们的顺序,所以在编译阶段,先执行了变量的声明。
|
为什么会出现变量提升? 因为 JavaScript 在运行的时候会有 编译和和执行两个过程,在它编译的时候,会对全局进行搜索,所有的变量和函数声明会被移至其作用域的顶部,而其它的语句不会改变它们的顺序,所以在编译阶段,先执行了变量的声明。
|
||||||
|
|
||||||
我们声明一个函数的时候如果在声明函数的前面调用这个函数也是可以执行的,因为这个函数在解析的时候函数声明会被移至其作用域的顶部 。函数提升只提升函数声明,不会提升函数表达式。
|
我们声明一个函数的时候如果在声明函数的前面调用这个函数也是可以执行的,因为这个函数在解析的时候函数声明会被移至其作用域的顶部 。函数提升只提升函数声明,不会提升函数表达式。
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// 普通函数声明
|
// 普通函数声明
|
||||||
console.log(Gangster("yck")) // yck undefined
|
console.log(Gangster("yck")); // yck undefined
|
||||||
function Gangster(name) {
|
function Gangster(name) {
|
||||||
console.log(name);
|
console.log(name);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// 声明式函数
|
// 声明式函数
|
||||||
console.log(Gangster("yck")) // Gangster is not a function
|
console.log(Gangster("yck")); // Gangster is not a function
|
||||||
var Gangster = function (name) {
|
var Gangster = function (name) {
|
||||||
console.log(name);
|
console.log(name);
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
在变量赋值前,函数声明依旧是函数声明,当变量赋值后,函数声明被会被相同名字的变量覆盖,所以说函数提升的优先级大于变量提升
|
在变量赋值前,函数声明依旧是函数声明,当变量赋值后,函数声明被会被相同名字的变量覆盖,所以说函数提升的优先级大于变量提升
|
||||||
|
|
||||||
```js
|
```js
|
||||||
function Gangster() {
|
function Gangster() {
|
||||||
console.log("大佬");
|
console.log("大佬");
|
||||||
};
|
}
|
||||||
console.log(Gangster); // Function: Gangster
|
console.log(Gangster); // Function: Gangster
|
||||||
Gangster(); // 大佬
|
Gangster(); // 大佬
|
||||||
var Gangster = "我是变量的值";
|
var Gangster = "我是变量的值";
|
||||||
@ -172,13 +177,15 @@ console.log(Gangster); // 我是变量的值
|
|||||||
```
|
```
|
||||||
|
|
||||||
用 `var` 声明变量时会将声明提升到函数或全局作用域的顶部。但是 `let` 或者 `const`,会将声明放进 TemporalDeadZone,简称 TDZ(暂时性死区),只有 JavaScript 执行到当前变量声明这句语句时,才能使用这个变量。
|
用 `var` 声明变量时会将声明提升到函数或全局作用域的顶部。但是 `let` 或者 `const`,会将声明放进 TemporalDeadZone,简称 TDZ(暂时性死区),只有 JavaScript 执行到当前变量声明这句语句时,才能使用这个变量。
|
||||||
```js
|
|
||||||
console.log(yck) // undefined
|
|
||||||
var yck='大佬';
|
|
||||||
|
|
||||||
console.log(typeof yck) //ReferenceError
|
```js
|
||||||
let yck='大佬';
|
console.log(yck); // undefined
|
||||||
|
var yck = "大佬";
|
||||||
|
|
||||||
|
console.log(typeof yck); //ReferenceError
|
||||||
|
let yck = "大佬";
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] 文档
|
- [ ] 文档
|
||||||
- [ ] [JS 变量提升](https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting)
|
- [ ] [JS 变量提升](https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting)
|
||||||
- [ ] 推荐文章
|
- [ ] 推荐文章
|
||||||
|
Loading…
Reference in New Issue
Block a user