2 fvxiaoyi fvxiaoyi 于 2016.01.21 14:57 提问

js function 的一些疑问

function m1(){
console.log('m1 one');
}
m1();
var m1 = function(){
console.log('m1 two');
}
m1();
这样执行的结果是 先输出m1 one 然后在m1 two;
function m1(){
console.log('m1 one');
}
m1();
function m1(){
console.log('m1 two');
}
m1();
这个输出却2次都是m1 two。
function m1(){}和var m1 = function(){} 这2种声明有什么不同?
请高手赐教

6个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.01.21 15:29
已采纳

在js加载时,会对方法名和变量名先进行解析和加载

第一个过程
var m1;//扫描到变量,把申明提前了,但变量的初始值还是再原来的位置进行赋值,也就是初始时是函数的定义
 function m1(){
console.log('m1 one');
}
m1();
m1 = function(){//这里才对变量进行覆盖
console.log('m1 two');
}
m1();
第二个过程中,js加载会先扫描function,一次扫描完在执行,m1就被后面的覆盖了
 function m1(){
console.log('m1 one');
}
m1();
function m1(){
console.log('m1 two');
}
m1();
rui888
rui888   Ds   Rxr 2016.01.21 15:16
rui888
rui888   Ds   Rxr 2016.01.21 15:21
qq_19891827
qq_19891827   2016.01.21 15:53

使用 function m1(){...}方式创建函数被称为声明方式;
使用var m1=function(){..}方式创建函数被称为直接量方式;
导致结果不同是由于声明提前引起的,即在js代码执行前,会先预读所有var即function到当前作用于的顶部,而其赋值留在原地。

showbo
showbo   Ds   Rxr 2016.01.21 16:05
u013488838
u013488838   2016.01.21 16:10

function m1(){} 是声明了一个叫m1的方法, var m1 = funtion(){} 是将m1声明为一个对象

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!