- 声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。
- 声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建。
- 声明变量是它所在上下文环境的不可配置属性(non-configurable property),非声明变量是可配置的(例如非声明变量可以被删除)。
关于区别的第二条,是不是说,js 会先检查所有代码的 var 关键字,如果有声明就先占一个位置来明确作用域。这样理解对吗?@billy
var a = 'aa'
var a = 'aaa'
虽然这样写不好,但好像也没啥问题吧? @maomaoxgg
<script>
var a = 10;
var b = 10;
function sth(){
console.log(a);//10
a=2;
console.log(a);//2
if(a >0){
b = 3;
console.log(a);//2
}
}
function doit(){
sth();
alert(a+"+"+b);//2+3
}
</script>
这样是我期待的结果了. 可是原帖中的现象要怎么解释呢?
#1 楼 @maomaoxgg "崩了"是指?
因为机器上同时有 2.7 和 3.4,搞不清 python,python3,pip,pip3,这些命令是怎么地快捷方式?看起来不像是普通的软链接
-bash: /usr/local/sbin:/Users/baodong/__DEV__/android-ndk-r10e:/Users/baodong/__DEV__/apache-ant-1.9.5/bin:/Users/baodong/Library/Android/sdk/tools:/Users/baodong/Library/Android/sdk/platform-tools:/Users/baodong/Library/Android/sdk:/Users/baodong/__DEV__/cocos2d-x-3.6/templates:/Users/baodong/__DEV__/cocos2d-x-3.6/tools/cocos2d-console/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/php5-5.6.6-20150220-225050/bin:/Users/baodong/.composer/vendor/bin:/opt/local/bin:/opt/local/sbin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools:/Users/baodong/__DEV__/apache-ant-1.9.5/bin:/Users/baodong/Library/Android/sdk/bin:/Users/baodong/__DEV__/android-ndk-r10e:/Users/baodong/.rvm/bin:/Users/baodong/.rvm/bin: No such file or directory
#1 楼 @blacktulip 那是不是根据所列出的 PATH 的先后顺序来查找呢?从$PATH 看,我机器上 python3 的顺序在 python2 的前面,系统默认查找的是 python2,这是为什么呢?
#2 楼 @piecehealth 噢,谢谢! 但是我更想用一种明确的方式来调用,有推荐吗?
#1 楼 @chaucerling 字符串比较不会忽略大小写吧~?