js 函数学习

1 函数声明和函数表达式

 函数声明是通过命名的方式定义函数,函数表达式是匿名的方式定义函数(函数是在特定的环境下执行代码的对象)

 

function a() {
console.log(‘a‘);
}
a();  //函数声明

var a = function() {
console.log(‘a‘);
};
a();//函数表达式

二者的区别是函数声明的方式会得到提升 也就是可以在函数的声明语句之前调用函数

a();
function a() {
console.log(‘a‘);
}//这样不会报错

函数表达式就不可以

a();
var a = function() {
console.log(‘a‘);
}; //会报错 a未定义

2 arguments对象

function test() {
console.log(arguments[0],arguments[1],arguments[2],arguments.length);
}

test(1,2,3); //1 2 3 3

使用arguments对象可以获得相应的实参 

还有另一种用法

function factorial(n) {
if(n <= 1) {
return 1;
} else {
return n*arguments.callee(n-1);
}
}
console.log(factorial(5));

通过arguments.callee获得正在执行的function对象的引用(很不错的用法)

3 作用域

var a = 100;

function test() {
console.log(a);

var a = 20;
console.log(a);
}
test();//undefined 20

我开始以为第一个a会访问函数外面的全局变量,其实不是,这是因为在函数内部声明的var a的作用域是整个函数而当第一次访问它的时候它并没有被赋值

上面的代码相当于

var a = 100;

function test() {
var a;
console.log(a);

var a = 20;
console.log(a);
}
test();

javascript中也不存在块级作用域,但是使用let语句可以实现块级作用域的效果

var a = 10;
{
let a = 100;
console.log(a);//100
}
console.log(a);//10

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。