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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Javascript变量提升的问题
var v='Hello World'; alert(v); 弹出“Hello World”var v='Hello World'; (function(){ alert(v); })() 也是弹出了“Hello World”var v='Hello World'; (function(){ alert(v); var v='I love you'; })() 弹出了“undefin
nodejs学习过程中遇到的一些难点整理
1. app.useapp.use 加载用于处理http請求的middleware(中间件),当一个请求来的时候,会依次被这些 middlewares处理 app.use顺序执行 注意:app.use注册的中间件,如果path参数为空,则默认为”/”,而path为”/”的中间件默认匹配所有的请求。//定义自己的中间件 // catch 404 and forward to error handle
JS实现MD5加密,提供多种加密方法
JS实现MD5加密,JS直接可调用 JS实现MD5加密,提供多种加密方法 function hex_md5(s) function b64_md5(s) function str_md5(s) function hex_hmac_md5(key, data) function b64_hmac_md5(key, data) function str_hmac_md5(key, data)
杭电oj疑问
杭电oj上的一些疑问,适用于初学者,可以解答一些疑问 都是一些水题
每天一篇面试题(一)
题目一关于函数作用域var a = 1; var c = 10; function b(){ c = 100; a = 10; return; var a = 1000; } b(); console.log(a,c); 答案1 100解析 大家都知道return语句后面的语句将不会被执行,但是由于后面是一句声明var a = 1000;这就用到
js函数对象
函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解。  javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前,先看一下函数的使用语法:以下是引用片段:function func1(…){…}  var func2=function(…){…};  var func3=function func4(…){…};  var func5=new Func
关于机器人的一些疑问
本篇记录一些关于机器人的疑问,并进行收集资料与解答。1.在运动规划里,机器人怎么获得障碍物的信息?在仿真里,障碍物在哪应该是知道的,不知道信息,怎么进行规划?   机器人的感知,现在是怎么做的,机器人要走进千家万户,要靠感知方面的突破吗?2....
JavaScript的一些题目
kangax 的javascript谜题 第一题 (function(){ return typeof arguments; })(); //问自动执行函数会返回什么值 // 就是考Arguments对象的typeof // 看平时用firebug多不多了…… 第二题 var f = function g(){ return 23; };
我遇到的一些问题的解决答案,有关于操作系统中的
:什么是中断? A:中断嘛,举个容易理解的例子吧。 比如莲莲和唐唐在下象棋,眼看莲莲就快招架不住了,正当此紧要关头,唐 唐的女友来了,非要唐唐陪她上街买衣服不可(唐唐晕倒:-) ),于是唐唐 不得不同莲莲商量,先把棋盘封了,待买完衣服后继续战斗。掌灯时分,唐 唐带着满脸疲惫回到了棋盘前,结果莲莲不费吹灰只力便反败为胜。 这就是整个中断过程。我们来看看中断过程是如
一些疑问
为什么muduo编译的时候需要将base库和net库顺序进行调整