其中,在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); //

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

解析:

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}

给函数对象定义属性。

js中函数提升及var变量提示的更多相关文章

  1. js中函数声明先提升还是变量先提升

    根据官方书籍<你不知道的javascript>(上卷)中写道: "函数会首先被提升,然后才是变量". 例子: console.log(foo); function fo ...

  2. js中的全局变量和静态变量的使用, js 的调试?- 如果js出错, js引擎 就会停止, 这会 导致 后面的 html中 refer 该函数时, 会报错 函数为定义!!

    效果里面的函数, 如show, hide,slideDown等, 这些都叫 "效果"函数, 但是里面可以包含动画, 也可以 不包含动画. 动画,是指 元素 的内容 是 逐渐 显示/ ...

  3. 关于js中函数的调用问题

    js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...

  4. JS中函数参数和函数返回值的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  5. js中函数传参的情况

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 对JS中函数的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  7. JS中函数void()

    <a href="javascript:void(0)">hello</a>/* * JS中函数void()的运用大体是这种新式; * void()是运算符 ...

  8. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...

  9. Javascript中函数提升和变量提升

    词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active ...

随机推荐

  1. [原]NYOJ-A*B Problem II-623

    大学生程序代写 A*B Problem II 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 ACM的C++同学有好多作业要做,最头痛莫过于线性代数了,因为每次做到矩阵相 ...

  2. 把自定义的demuxer加入ffmpeg源码

    .简介:把上一篇文章中的demuxer加入ffmpeg源码中去,使可以用命令行方式调用自定义的demuxer 第一步: 在libavformat目录下新建mkdemuxer.c和mkdemuxer.h ...

  3. Gym - 100570C: Subrect Query (巧妙的单调队列)

    De Prezer loves rectangles.He has a n × m rectangle which there is a number in each of its cells. We ...

  4. css 更换浏览器 默认图标

    cursor:url("./images/test.cur"),auto; 只在chrome测试过...

  5. Python:生成器函数

    生成器函数:包含yield语句的函数: 生成器对象:生成器对象和迭代器对象行为相似,都支持可迭代接口:__next__(),若想执行生成器函数内部语句,则需要迭代协议’ A.生成器函数被调用时,并不会 ...

  6. js产生不同的随机数

    前言:前几天写到一个程序,用到要使用不同随机数的方法,结果愣是整了半天没整出来,说来也是惭愧啊(亏我还是软件工程的学生,其实这个问题以前遇到过,只是我逃避了,哎,自己刨的坑终究会把自己陷进去,╮(╯▽ ...

  7. Debain install Jupyter

    1. install Anaconda https://www.anaconda.com/download/#linux 2. config jupyter $ ipython from notebo ...

  8. JDBC操作MySQL(crud)

    这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...

  9. ubuntu 13.04 安装 JDK

    ubuntu 13.04 安装 JDK 具体步骤参详了如下链接: http://blog.csdn.net/yang_hui1986527/article/details/6677450 1.到 Su ...

  10. 《精通Spring4.X企业应用开发实战》读后感第六章(内部工作机制、BeanDefinition、InstantiationStrategy、BeanWrapper)