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