函数和作用域
大约 2 分钟
函数的返回值
返回值就是函数执行完毕的结果 return 要返回的内容
如果函数没有写return, 默认会返回一个undefinedreturn后面什么也不写, 默认会返回一个undefinedreturn会结束整个函数的执行, 一个函数只能有一个返回值return与break的区别: break: 结束整个循环的执行 return: 结束整个函数的执行
arguments
所有的函数都有一个内置对象: arguments
该对象存储了函数执行时, 传入的所有实参
以伪数组的形式存储
伪数组: 具有索引和 length 属性, 但不是数组的对象
如果函数调用时没有传实参,那么形参的值为undefined 如果函数调用时传入的实参个数大于形参个数,多余的参数会被“舍弃”,在auguments里
function sum(a, b) {
console.log(a + b)
}
sun(2, 3, 57, 9, 5)
函数的了解内容
- 匿名函数 没有名字的函数
var f = function () {} - 函数也是一种数据 变量可以是基本数据类型,例如
numberstringnumber和string这些基本数据类型可以作为参数传递到函数中 函数也可以作为参数传递到函数中使用同理, 也可以把函数作为返回值来使用function test(a) {} var num = 1 var fn = function () {} test(num) // 也可以将 fn 传入 test 函数 test(fn)
作用域
全局作用域
在全局作用域中声明的变量, 叫 全局变量, 在任何地方都可以使用 局部作用域(函数作用域) 在局部作用域中声明的变量, 叫 局部变量, 只能在当前作用域中使用 因为在 JS 中, 只有函数可以独立开辟一块作用域
块级作用域
何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。在 es5 之前没有块级作用域的的概念,只有函数作用域,现阶段可以认为 JavaScript 没有块级作用域
预解析
把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。 先提升 var,再提升 function。
作用域链
在局部作用域中访问变量时, 先找当前作用域中是否存在该变量, 如果存在直接使用(就近原则), 如果当前作用域中没有该变量, 会往上级作用域中查找
