javascript常见错误(1)
2017-02-15 20:54
387 查看
看下面的代码:
在编辑器后运行后返回“TypeError”
为什么不是 “foobar”?
原因出在
第一个代码块的第二行foo变量“被提前”了,但是它的赋值(也就是函数)并没有被提前,所以变量声明的时候还没有这个函数。
从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined。
总结:
函数声明可以被提前,但函数表达式不能被提前
写成下面的样子就没什么问题:
下面在牛客网看到的这个代码同理
输出结果为:Goodbye Jack
原因同上,也是变量声明提升的问题。
变量生明会提升到当前作用域的顶部,一个函数就是一个作用域
(function() { var x=foo(); var foo=function foo() { return “foobar”; }; return x; })();
在编辑器后运行后返回“TypeError”
为什么不是 “foobar”?
原因出在
var foo=function foo() { return “foobar” };
第一个代码块的第二行foo变量“被提前”了,但是它的赋值(也就是函数)并没有被提前,所以变量声明的时候还没有这个函数。
从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined。
总结:
函数声明可以被提前,但函数表达式不能被提前
写成下面的样子就没什么问题:
(function() { var foo=function foo() { return “foobar”; }; var x=foo(); return x; })();
下面在牛客网看到的这个代码同理
var name=’World!’; (function() { if(typeof name===’undefined’) { var name=’Jack’; console.log(‘Goodbye’+name); } else { console.log(‘Hello’+name); } })();
输出结果为:Goodbye Jack
原因同上,也是变量声明提升的问题。
(function(){ var name;//注意这里,变量提升 if(typeof name === 'undefined'){ name = 'Jack'; console.log('Goodbye'+name); }else{ console.log('hello'+name); } })();
变量生明会提升到当前作用域的顶部,一个函数就是一个作用域
相关文章推荐
- javascript 常见错误(失误足迹)
- 常见错误:JavaScript 提交form 的时候,Error:对象不支持此属性或方法
- JavaScript中常见的几种“缺少对象”错误
- JavaScript中易犯的小错误---“常见错误一”
- 再谈javascript常见错误及解决方法
- javascript常见错误
- javascript 常见语法错误分析
- JavaScript 常见错误
- javaScript常见错误对照表
- JavaScript中日常收集常见的10种错误(推荐)
- 常见的JavaScript错误
- 常见的JavaScript错误(转)
- 常见的JavaScript错误
- JavaScript中常见的几种“缺少对象”错误
- javascript中"/"运算符常见错误
- javascript常见错误解释
- 常见的JavaScript错误
- Javascript常见错误
- JavaScript 中的常见错误
- JavaScript—在循环中创建闭包:一个常见错误