作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4235721.html 1.为什么使用 const int 而不使用 #define 在使用#define时,比如#define Max 10000,如果出现错误,编译器并不会提示Max,因为在预处理阶段已经把Max替换成了10000,因此编译器会莫名其妙的提示10000这个数字出现了错误,从而不利于程序debug,但是如果使用const int Max=10000,编译器就会准确的提示Ma…
function show( flag ){ console.log( a ); if( flag ){ var a = 'ghostwu'; return a; } else { console.log( a ); return null; } } 我们从es5的变量提升开始说起, 由于变量提升的原因, 上述程序, 在第2行和第7行都能访问到a的值, 只不过是undefined, 如果你不熟悉javascript这种变量的预解释机制,可能会认为第2行和第7行会报错, 只有flag为true的时…
ES6之前javascript只有全局作用域和函数作用域,所以经常会遇到变量提升了或者使用闭包的时候出错的问题. 所有a[i]都会输出10: var arr=[]; for (var i=0;i<10;i++){ arr[i]=function(){ console.log(i); }; } 变量提升,输出undefined. function showName(){ console.log(name); var name = "Jhon"; } ES6引入了let和const关…
let和var一样也是用来定义变量,不同之处在于let是块级作用域,只在所定义的块级作用域中生效,一个花括号便是一个块级作用域 {var a="我是var定义的";let b="我是let定义的"} console.log(a); //我是var定义的 console.log(b); //b is not defined 可以看出let定义的变量在全局作用域内并没有生效 如果我们在全局作用域中定义,试一下看在函数或者流程控制语句中是否会输出 let a="…