我爱编程

js基础(二)

2018-04-11  本文已影响0人  李华炎

引用

引用:是一个指向对象实际位置的指针。

// 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代码在执行时分为两个阶段

  1. 预解析阶段(变量和函数提升)
  2. 执行阶段

函数声明和函数表达式有什么不同?

函数声明会被提升到最前面,连同函数体;

函数表达式只会提升变量,不提升函数体;

变量提升

  1. 提升被var声明的变量
  2. 只提升变量名不提升值

函数提升

  1. 同名函数,后面的函数会替换前面的函数
  2. 函数和变量同名,只会提升函数,忽略变量
//变量和函数同名
//在提升的时候,如果有变量和函数同名,会忽略掉变量,只提升函数

// 预解析前
console.log(foo);
function foo(){}
var foo = 2;
console.log(foo);

//预解析后,提升后的代码
function foo(){};
console.log(foo);
foo=2;
console.log(foo);
上一篇 下一篇

猜你喜欢

热点阅读