javascript - Js 函数声明和函数表达式
问题描述
`alert(sum(10,10));var sum=function(num1,num2){
return num1+num2;
};`为什么报错,不是有变量提升吗
问题解答
回答1:在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是:
只有函数声明形式才能被提升。
1、函数声明形式 【成功】
function myTest(){ foo(); function foo(){ alert('我来自 foo'); } } myTest();
2、函数表达式方式【失败】
function myTest(){ foo(); var foo =function foo(){ // 看这里alert('我来自 foo'); } } myTest();
看我这篇: http://www.jianshu.com/p/85a2...
回答2:函数表达式不会提升。
看一遍《javascript高级程序设计》吧。
回答3:声明和表达式是不一样的,声明的话不光定义会提前,赋值也会提前赋好,而表达式不会,举个栗子:
a();function a(){}; //等同于var a = function(){};a();///////对于表达式有a();var a = function(){}; //等同于var a;a();a = function(){}; //简单来讲就是表达式的赋值必须要等程序运行到相关行的时候才会进行回答4:
同楼上,你的函数创建方式是函数字面量形式,改成
alert(sum(10,10));function sum(num1,num2){ return num1+num2;}
就行了
相关文章:
1. java - ehcache缓存用的是虚拟机内存么?2. javascript - JS如何取对称范围的随机数?3. 数据库 - mysql如何处理数据变化中的事务?4. 关于docker下的nginx压力测试5. java - mongodb分片集群下,count和聚合统计问题6. javascript - 有什么兼容性比较好的办法来判断浏览器窗口的类型?7. android - java 泛型不支持数组,那么RxJava的Map集合有什么方便的手段可以定义获得一串共同父类集合数据呢?8. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下9. java - 自己制作一个视频播放器,遇到问题,用的是内置surfaceview类,具体看代码!10. 服务器端 - 采用nginx做web服务器,C++开发应用程序 出现拒绝连接请求?
