JavaScript 函数
phpwsl 发布于 2018-08-27 15:27:53
函数
前言
在JavaScript中,函数即对象,程序可以随意操控它们。比如JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数。
定义函数
1. 第一种方式 //在这里调用可以 test(); function test(){ console.log('aaa'); } 2. 第二种方式 //这样调用不行 squre(); //将函数赋值给squre变量 var squre = function (x) { return x*x; }; //也可以有名字 var squre = function fact() {return x;}; 3. 第三种方式 //函数会自动调用 (function (x) {return x*x;})(10);
函数作用域
1. 如果一个变量在函数体内部声明,则该变量的作用域为整个函数体,在函数体外不可引用该变量 function foo() { var x = 1; x = x + 1; } x = x + 2; //无法在foo函数体外引用变量x 2. 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响 function foo() { var x = 1; x = x + 1; } //bar函数中的变量不会受foo函数影响 function bar() { var x = 'A'; x = x + 'B'; } 3. 由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行 function foo() { var x = 1; function bar() { var y = x + 1; // bar可以访问foo的变量x } var z = y + 1; // foo不可以访问bar的变量y } 4. 如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量 function foo() { var x = 1; function bar() { var x = 'A'; alert('x in bar() = ' + x); // 'A' } alert('x in foo() = ' + x); // 1 bar(); } 5. 变量提升 JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部 function test(){ console.log(a);//undefined; var a = 12; } //相当于下面 function test(){ var a; a = 12; }
闭包
所谓闭包其实就是函数中包含了函数。 function foo(){ //由于sex是局部变量,只能在foo内部访问。类似于类的私有属性 var sex = '男'; function getSex(){ console.log(sex); } //将getSex函数返回 return getSex; } 闭包可以封装一个私有变量,类似php中的private效果。 function foo(){ //由于sex是局部变量,只能在foo内部访问。类似于类的私有属性 var sex = '男'; function getSex(){ console.log(sex); } //将getSex函数返回 return getSex; } //调用foo函数 var res = foo(); //res其实就是getSex函数 res();