问题描述
- 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种声明有什么不同?
请高手赐教
解决方案
在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();
解决方案二:
js 作用域 https://www.zhihu.com/question/21719239/answer/21219233
解决方案三:
http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname
解决方案四:
使用 function m1(){...}方式创建函数被称为声明方式;
使用var m1=function(){..}方式创建函数被称为直接量方式;
导致结果不同是由于声明提前引起的,即在js代码执行前,会先预读所有var即function到当前作用于的顶部,而其赋值留在原地。
解决方案五:
javascript运行机制浅析
解决方案六:
function m1(){} 是声明了一个叫m1的方法, var m1 = funtion(){} 是将m1声明为一个对象
时间: 2024-10-29 19:18:36