javascript-js function 的一些疑问

问题描述

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

javascript-js function 的一些疑问的相关文章

深入浅析JS Function()构造函数_javascript技巧

js中function对象是一个令人着迷的东西,但由于他太过于灵活,常常令人迷惑. 先给大家看个代码片段. var scope="global"; function constructFunction(){ var scope="local"; return new Function(" return scope"); } constructFunction()(); function constructFunction2(){ var scop

JavaScript通过function定义对象并给对象添加toString()方法实例分析

 这篇文章主要介绍了JavaScript通过function定义对象并给对象添加toString()方法,实例分析了javascript中function定义对象及添加方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例分析了JavaScript通过function定义对象并给对象添加toString()方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过function定义了一个movie对象,在movie对象内定义了一个toString方法,toString

JavaScript使用function定义对象并调用的方法

 这篇文章主要介绍了JavaScript使用function定义对象并调用的方法,实例分析了javascript中function定义及使用对象与方法的相关技巧,需要的朋友可以参考下     本文实例讲述了JavaScript使用function定义对象并调用的方法.分享给大家供大家参考.具体分析如下: JS中你可以通过函数的方式定义对象,下面的JS代码定义了一个movie的函数对象,然后通过new的方法声明对象,调用起来也非常简单. ? 1 2 3 4 5 6 7 8 <script type

javascript(js)的小数点乘法除法问题详解

 本篇文章主要是对javascript(js)中的小数点乘法除法问题进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 一.用js计算 12.32 * 7  结果是多少?答案:86.24000000000001   为什么会出现这种问题?怎么解决? js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变为整数来处理. 以上的计算可以改为: 12.32 * 100 * 7 /100 得出的结果是:86.24,正确.   另外再计算一下: 8.80 * 100 * 12 /

javascript-关于js中prototype的疑问

问题描述 关于js中prototype的疑问 /*--------------(1)---------------*/ function A(){ this.display = function(){ alert("A display"); } } function B(){ this.show = function(){ alert("B show"); } } A.prototype = new B(); var a = new A(); console.log

谈谈JavaScript中function多重理解

JavaScript 中的 function 有多重意义.它可能是一个构造器(constructor),承担起对象模板的作用: 可能是对象的方法(method),负责向对象发送消息.还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数. 由于语言设计者的妥协,在 JavaScript 加入了一些 class 相关的特性,以使 JavaScript 看起来确实象 Java,可以 "面向对象".虽然 JavaScript 添加了 new 和 this, 但却没有 clas

javascript/JS常用正则表达式

javascript/JS限制用户名只能输入字母和数字下划线 function checkreg(){         var msg = "对不起,输入错误\n";         var regform = document.all.reg;         var username = regform.username;         var password1 = regform.password1;         var password2 = regform.passw

JavaScript通过function定义对象并给对象添加toString()方法实例分析_javascript技巧

本文实例分析了JavaScript通过function定义对象并给对象添加toString()方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过function定义了一个movie对象,在movie对象内定义了一个toString方法,toString方法通过外部函数实现. <script type="text/javascript"> function movieToString() { return("title: "+this.titl

JavaScript获取function所有参数名的方法_javascript技巧

我写了一个 JavaScript函数来解析函数的参数名称, 代码如下: function getArgs(func) { // 先用正则匹配,取得符合参数模式的字符串. // 第一个分组是这个: ([^)]*) 非右括号的任意字符 var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1]; // 用逗号来分隔参数(arguments string). return args.split(",").map(functi