<script type="text/javascript">
function checkscope(d) {
var i = 0;
if (typeof d == "object") {
var j = 0;
for (var k = 0; k < 10; k++) {
document.write(k);
}
document.write(k);
}
document.write(j);
}
checkscope("精华");
</script>这段代码,运行之后,为什么输出的是一个undefined呢?k的值0---9应该输出吧,j的值也应该输出0啊,为什么呢?
function checkscope(d) {
var i = 0;
if (typeof d == "object") {
var j = 0;
for (var k = 0; k < 10; k++) {
document.write(k);
}
document.write(k);
}
document.write(j);
}
checkscope("精华");
</script>这段代码,运行之后,为什么输出的是一个undefined呢?k的值0---9应该输出吧,j的值也应该输出0啊,为什么呢?
var i = 0;
if (typeof d == "object") {//这个不成立,所以没有执行j=0赋值操作,但是if没有作用域,var申明的j预编译已经生成,为undefined
var j = 0;
for (var k = 0; k < 10; k++) {
document.write(k);
}
document.write(k);
}
document.write(j);
}
checkscope("精华");你的代码等价于下面
function checkscope(d) {
var i = 0;
var j/////
if (typeof d == "object") {
vj = 0;
for (var k = 0; k < 10; k++) {
document.write(k);
}
document.write(k);
}
document.write(j);
}
checkscope("精华");
if后面的压根就没执行
直接执行document.write(j);
j在哪里定义的?不输出undefined输出什么?
《JS权威指南》说的:函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的...
那么,变量k和j都应该输出undefined吧,为什么只输出一个undefined
j 未赋值
这样的用法不太常见
一般都是
if(d)就可以
或者if(!!d)
就可以判断d是否为空了