javascript学习
声明
var
变量声明,通俗来说会将变量上升到上级代码块的变量范围中。这里的上级代码块详细来说应该是当前函数作用域或者全局作用域,因为在 JavaScript 里,只有函数和全局作用域能够限制var
变量的作用域,像if
语句、for
循环、while
循环等代码块是无法限制的。
比如:
无法限制var
作用域的情况:1
2
3
4if(true){
var x = 5;
}
console.log(x);//x的值为5可以限制
var
作用域的情况:1
2
3
4
5
6
7
8function example() {
if (true) {
var x = 5; // 实际上会被提升到函数顶部
}
console.log(x); // 可以访问 x,输出 5
}
console.log(x); // 报错:ReferenceError(x 不在全局作用域,因为function将其限制)
函数
函数定义与声明
二者区别
函数声明(Function Declaration)
1 | function add(a, b) { |
特点:
- 以
function
关键字开头,后跟函数名。 - 函数提升(Hoisting):可以在定义前调用(JavaScript 引擎会将函数声明提升到当前作用域的顶部)。
- 独立语句:不能嵌套在非代码块中(如
if
语句、赋值语句)。
- 以
示例:
1
2
3
4console.log(add(2, 3)); // ✅ 可以在定义前调用
function add(a, b) {
return a + b;
}
2. 函数表达式(Function Expression)
1 | const add = function(a, b) { |
特点:
- 以
function
关键字开头(匿名函数),或使用具名函数表达式(如function add(a, b)
)。 - 赋值给变量:函数是一个值,存储在变量
add
中。 - 没有函数提升:必须在定义后调用(变量提升但值为
undefined
)。
- 以
示例:
1
2
3
4console.log(add(2, 3)); // ❌ 报错:add is not a function
const add = function(a, b) {
return a + b;
};
3. 箭头函数(Arrow Function)
1 | const add = (a, b) => a + b; |
特点:
- 更简洁的语法:使用
=>
符号,省略function
关键字。 - 隐式返回:单行表达式无需
return
关键字(如(a, b) => a + b
)。 - 没有自己的
this
:继承自父作用域(适合回调函数)。 - 不能使用
arguments
对象:不绑定arguments
变量。
- 更简洁的语法:使用
示例:
1
2
3
4
5
6
7
8
9
10// 完整语法
const add = (a, b) => {
return a + b;
};
// 隐式返回
const double = num => num * 2;
// 无参数
const greet = () => "Hello!";
箭头函数是函数表达式的一种吗?
是的!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!