这里是JavaScript开发者必须掌握的常识:
- 所有全局变量都是window对象的属性。
var a = 1
等效于:
window.a = 1
- var变量存在“变量提升”现象, let不会。
console.log(a); //undefine
var a = 1;
//let
console.log(a); // //抛出异常:Uncaught ReferenceError: a is not defined
let a = 1;
- var变量的声明会被提升,但是初始化不会提升。
console.log(a); //undefine
var a = 1;
//等效于
var a;
console.log(a); //undefine
a = 1;
- 函数声明也会提升。
- 函数声明会覆盖变量声明,但是不会覆盖变量初始化
alert(typeof value); //"function"
function value(){
return 1;
}
var value;
alert(typeof value); //"function"
alert(typeof value); //"function"
function value(){
return 1;
}
var value = 1;
alert(typeof value); //"number"
- 函数的arguments是对函数实参的引用,改变arguments会改变实参内容。
function b(x, y, a) {
arguments[2] = 10;
alert(a); //10
}
b(1, 2, 3);
- 函数中的this参数:对象中的方法,this就是函数所在的对象;全局函数的this是window。
var object = {
method: function() {
alert(this === object); //true
}
}
object.method();
//
function method() {
alert(this === window); //true
}
method();
- 函数调用call()方法,实现函数成为另一个对象的函数,call()传的第一个参数变成这个函数的this,同时,后续参数作为传给函数。
var obj = {};
function method(x) {
alert(this === obj);
console.log(x);
}
method(10); //false
method.call(obj, 10); //true
如果call()中没有参数,或者为null或者undefined,那么默认为window。
....未完待续
网友评论