#====== 函数=====   ├── 概述 │ ├── 函数的声明 │ ├── 函数的重复声明 │ ├── 圆括号运算符,return语句和递归 │ ├── 第一等公民 │ ├── 函数名的提升 ├── 函数的属性和方法 │ ├── name属性 │ ├── length属性 │ ├── toString() ├── 函数的作用域 │ ├── 定义 │ ├── 函数内部的变量提升 │ └──函数本身的作用域   #=============== ##概述 - 函数的声明   - function命令, function命令声明的代码区块就是一个函数
1 ```
2 function print(param) {
3 console.log(param);
4 }
5 ```
  - 函数表达式,将一个匿名函数赋值给一个变量,这种方式function后面没有函数名
1 ```
2 var print = function(param){ }
3 ```
  - function构造函数,function接收的所有参数中,最后一个是函数体,如果只有一个参数,那么这个参数就是函数体。
1 ```
2 var foo = new function(
3 'x',
4 'y',
5 'return x+y'
6 )
7 ```
- 重复声明   - 一个函数被多次声明,后面的就会覆盖前面的,前一次声明在任何时候都是无效的。 - 圆括号运算符,return语句和递归   - 在函数名后加圆括号会调用函数时,圆括号可以传入参数   - return表示返回,如果return语句后还有其他语句也不执行了   - 函数可以调用自身,称之为递归 - 第一等公民   - js将函数看做一种值,与其他值(数值,字符串,布尔值等等)地位相同。凡是可以使用值得地方,就能使用函数。函数只是一个可   以执行的值 - 函数名提升   - js将函数名视为变量名,用function声明函数时,整个函数也会想变量声明一样,被提到代码头部   ##函数的属性和方法 - name属性   - 函数的name返回函数的名字。
1 ```
2 var foo = function() {};
3 function foo2() {};
4 var foo3 = functon print(){};
5 foo.name // foo
6 foo2.name //foo2
7 foo3.name //print
8 ```
- length属性   - length属性返回函数预期传入的参数个数
1 ```
2 function print(a,b) {};
3 print.length //2
4 ```
- toString()   - func.toString()会返回一个字符串是这个函数的源码   - 对于原生函数返回的内容是 function(){[native code]}   #函数的作用域 - 定义   - 对于顶层函数来讲,函数外部声明的变量就是 全局变量 ,它可以在函数内部读取   - 函数内部定义的变量,函数外部无法读取,称为 局部变量 ,它在函数内部可以覆盖同名全局变量 - 函数内部变量的提升   - 与全局作用域一样,函数作用域内部也会产生变量提升作用,var声明的变量不管在任何位置都会被提至函数头部
 1 ```
 2 var a = 1;
 3 var x = function () {
 4 console.log(a);
 5 };
 6  
 7 function f() {
 8 var a = 2;
 9 x();
10 }
11  
12 f() // 1  函数x是在f外层声明的,所以它的作用域绑定外层,它无法获取到f内部变量a的value
13 ```
 
 1 ```
 2 function foo() {
 3 var x = 1;
 4 function bar() {
 5 console.log(x);
 6 }
 7 return bar;
 8 }
 9  
10 var x = 2;
11 var f = foo();
12 f() // 1  bar绑定的作用域是foo,所以它接收的变量是foo了里面的
13 ```

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。