引用
引用:是一个指向对象实际位置的指针。
// 1. 多个变量引用同一个对象,只要修改对象,多个变量引用的内容就被修改
var obj = new Object();
var objRef = obj;
// 2. 修改对象的引用
var items = new Array('one', 'two', 'three'); // 将 items 置为字符串数组
var itemsRef = items; // 将 itemsRef 置为 items 的引用
items = new Array('new', 'Array'); // 将 items 置为一个新的对象
console.log(items != itemsRef); // true
console.log('items: '+items); // new,Array
console.log('itemsRef: '+itemsRef); // one,two,three
函数重载和类型检查
在java语言中直接支持函数的重载,但在js中没有直接支持函数重载的特性。js中要实现函数的重载必须要满足两个条件。第一个就是需要有判断传入的参数的数量,第二个就是需要判断传入的参数的数据类型。
拓展原型对象
由于forEach、map都是ECMA5新增数组的方法,所以ie9以下的浏览器还不支持,可以从Array原型扩展可以实现该功能,例如forEach方法:
if (typeof Array.prototype.forEach != "function") {
Array.prototype.forEach = function() {
/* 实现 */
};
}
js代码执行过程
JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作
js代码在执行时分为两个阶段
- 预解析阶段(变量和函数提升)
- 执行阶段
函数声明和函数表达式有什么不同?
函数声明会被提升到最前面,连同函数体;
函数表达式只会提升变量,不提升函数体;
变量提升
- 提升被var声明的变量
- 只提升变量名不提升值
函数提升
- 同名函数,后面的函数会替换前面的函数
- 函数和变量同名,只会提升函数,忽略变量
//变量和函数同名
//在提升的时候,如果有变量和函数同名,会忽略掉变量,只提升函数
// 预解析前
console.log(foo);
function foo(){}
var foo = 2;
console.log(foo);
//预解析后,提升后的代码
function foo(){};
console.log(foo);
foo=2;
console.log(foo);
网友评论