#====== 函数=====
├── 概述
│ ├── 函数的声明
│ ├── 函数的重复声明
│ ├── 圆括号运算符,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 ```
转载于:https://www.cnblogs.com/Infinite-bing/p/10754524.html
相关资源:COM组件中调用JavaScript函数详解及实例