1、函数体中,遇到return,函数完毕;
2、关键字arguments,只在函数中使用,并且指向当前函数的调用者传入的所有参数
3、小心return语句:
如果这样写:
function foo() {
return
{ name: 'foo' };
}
调用foo()的结果是undefined,因为return语句后面会自动加上;,所以如果return后面没有东西,会自动生成;形成一个语句而忽略了下面的语句;
所以可以这样写:
function foo() {
return { // 这里不会自动加分号,因为{表示语句尚未结束
name: 'foo'
};
}
3、变量提升
JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部,但是变量的赋值不会被提升:
function foo() {
var x = 'Hello, ' + y;
console.log(x);
var y = 'Bob';
}
foo();
上面语句的结果为:
Hello, undefined
虽然变量y在最后申明了,但是会自动y的申明,但是y的赋值不会被自动提升。
4、小技巧:
关于名字:全局变量会绑定到window上,如果使用了相同名字的全局变量,就会造成冲突;
可以自己定义一个全局变量,然后把其他所有的变量和函数都绑定到这个全局变量上:
// 唯一的全局变量MYAPP:
var MYAPP = {};
// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// 其他函数:
MYAPP.foo = function () {
return 'foo';
};
这样会减少全局变量冲突的可能
5、用全部大写来表示变量名:
var PI = 3.14;
也可以用关键字const来定义常量:
const PI = 3.14;
6、解构赋值:
可以同时对一组变量进行赋值。
传统的做法,把一个数组的元素分别赋值给几个变量:
var array = ['hello', 'JavaScript', 'ES6'];
var x = array[0];
var y = array[1];
var z = array[2];
这样会很麻烦,如果一个浏览器支持解构赋值,那么就简单了:
var [x, y, z] = ['hello', 'JavaScript', 'ES6'];
网友评论