关于 function a(){} 和 var a=function(){}

例:

a();
b();
function a(){console.log(111);}
var b = function(){console.log(222);}

运行发现 111、b is not a function;

这是因为function a(){}在代码执行前进行了预编译。

什么是js的预编译?

js会把var和function这两个声明关键字提前解释一下,而变量的赋值是在代码执行时完成。

即:var b = function(){}在预编译阶段,相当于 var b ,而在执行的时候,因为从上至下执行,所以执行到b()的时候,浏览器只知道var b,并没有被赋值(undefined),所以报出b is not a function错误。

时间: 2024-08-25 04:07:52

关于 function a(){} 和 var a=function(){}的相关文章

1、function aa(){}和 var aa=function(){}的区别:

例如: alert(sum(10,10)); function sum(num1,num2){ return num1+num2; }//正常执行 备注:正常执行的那个,在代码开始执行之前,解析器就通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中,对代码求值时,javaScript引擎在第一遍会声明函数并将它们放到源代码数的顶部 alert(sum(10,10)); var sum=function(num1,num2){ return num1+num2; }//报错 1.fu

JavaScript中Function Declaration与Function Expression 或者说 function fn(){}和var fn=function(){} 的区别

JavaScript是一种解释型语言,函数声明会在JavaScript代码加载后.执行前被解释,而函数表达式只有在执行到这一行代码时才会被解释. 在JS中有两种定义函数的方式, 1是:var aaa=function(){...} 2是:function aaa(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. function方式定义函数可以先调用,后声明. var func=function 和 function func()在意义上没有任何不同,但其

function func(){} 与 var func=function(){}的区别

1  var func =function(){}  ,即和 var 变量的特性 一样. func 变量名提前,但是不会初始化,直到执行到初始化代码. 2  function func(){}      变量名 和方法体  都会提前到 顶部执行. 实例: { var k = xx(); function xx(){return 5;}}不会出错,而{ var k = xx(); var xx = function(){return 5;}}

从var func=function 和 function func()区别谈Javascript的预解析机制

var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function xx(){return 5;} } 不会出错,而 { var k = xx(); var xx = function(){return 5;} } 则会出错. 为什么会这样呢?这就要引出javascript中的预解析机制来解释了. JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个

作用域与闭包:this,var,(function () {})

this 在函数执行时,this 总是指向调用该函数的对象.要判断 this 的指向,其实就是判断 this 所在的函数属于谁. 在<javaScript语言精粹>这本书中,把 this 出现的场景分为四类,简单的说就是: 有对象就指向调用对象 没调用对象就指向全局对象 用new构造就指向新对象 通过 apply 或 call 或 bind 来改变 this 的所指. 作用域与闭包:this,var,(function () {})

var functionName = function() {} vs function functionName() {}

The difference is that functionOne is defined at run-time, whereas functionTwo is defined at parse-time for a script block. For example: <script> // Error functionOne(); var functionOne = function() { }; </script> <script> // No error fu

有具体名称的匿名函数var bar = function foo(){}

http://kangax.github.io/nfe/ 命名的函数表达式 函数表达式实际上可以经常看到.Web开发中的一个常见模式是基于某种特性测试来"分叉"函数定义,从而获得最佳性能.由于这种分叉通常发生在相同的范围内,所以几乎总是需要使用函数表达式.毕竟,就我们现在所知,函数声明不应该有条件地执行: // `contains` is part of "APE Javascript library" (http://dhtmlkitchen.com/ape/)

js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别

js中有两种声明函数的方法,分别为: var functionOne = function() { // Some code }; function functionTwo() { // Some code } 为什么会有两种不同的方法?每个方法的优点和缺点分别是什么?有什么情况是一种方法能完成而另外一种方法不能完成的吗? 答: by @Greg 不同点在于functionOne只会在到达赋值的那一行才会被真正定义,而functionTwo会在 包含它的函数或script脚本 执行的时候马上被定

var foo = function(){} 和 function foo(){}

var foo = function(){ alert(1) } function foo(){ alert(2) } foo()会输出1 这是因为function foo()这种写法会在程序执行前的预处理中赋值, 而var foo = function()会再一次声明foo.再一次赋值 把var 换成 let就会报错:foo已经被赋值了 这个var的变量提升是两码事,var的变量提升说的是 alert(foo) var foo = function(){ alert(1) } 会打印出unde