js函数详解
#====== 函数===== ├── 概述 │ ├── 函数的声明 │ ├── 函数的重复声明 │ ├── 圆括号运算符,return语句和递归 │ ├── 第一等公民 │ ├── 函数名的提升 ├── 函数的属性和方法 │ ├── name属性 │ ├── length属性 │ ├── toString() ├── 函数的作用域 │ ├── 定义 │ ├── 函数内部的变量提升 │ └──函数本身的作用域 #=============== ##概述 - 函数的声明 - function命令, function命令声明的代码区块就是一个函数
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
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 ```

更多精彩