js中函数提升及var变量提示

其中,在javascript中,函数声明及var声明的变量会得到提升。但是函数声明会先于var声明的变量被提升。即便function写在后面。

看下面的例子:

var aa = 221;
function aa(){
alert(111);
}
console.log(aa);  //221

说明了函数声明先被提升了。而后面的var aa声明覆盖了aa函数,所以打印出来的是 ------ 221。

上面的语句在浏览器解析的时候其实是这样的。

function aa(){
    alert(111);
}
var aa;
aa = 221;
console.log(aa);

这里补充一点,函数声明的函数名与普通对象的变量名没有什么区别(高级编程第三版)。说明函数名可以被变量覆盖。

function aa(){
       alert(111);
}
var aa = 221;
console.log(aa);  //221

这样执行效果也是一样的。

解析:

function aa(){
    alert(111);
}
var aa;
aa = 221;
console.log(aa);

 

同时,function也是对象,说明可以在它的身上定义属性和方法。

在它身上定义的方法叫做类方法,或者叫静态方法。

只属于这个类所有。类的实例不能够调用。

例子:

function aa(){
    alert(111);
}
aa.bb = function(){
     alert('我是静态方法');
}
aa.bb();  //弹出“我是静态方法”

说明函数可以定义方法。

function aa(){
alert(111);
}
aa.bb = function(){
  alert('我是静态方法');
}
var a = new aa();  这句话弹出111,即运行了aa函数。
a.bb();   // Uncaught TypeError: a.bb is not a function(…)

说明在JS中类的实例不能调用类方法。

function aa(){
alert(111);
}
aa.bb = function(){
  alert('我是静态方法');
}
aa.c={
    cc:5
}
console.log(aa.c);   //Object {cc: 5}

给函数对象定义属性。

 

posted @ 2016-04-18 10:30  黑客PK  阅读(2117)  评论(0编辑  收藏  举报