JS函数调用函数外的变量为啥是undefined

代码是这样的:<script>varrequestUrl="http://www.url.com/request";varmobile=document.getEleme... 代码是这样的:
<script>
var requestUrl = "http://www.url.com/request";
var mobile = document.getElementById("pn").value;

function show(){
alert(requestUrl);
alert(mobile);
}
show();//弹第一个requestUrl正常,弹第二个mobile时就是undefined,为什么?
</script>

<input type="telephone" id="pn" />

奇怪的是,当我把这行
var mobile = document.getElementById("pn").value;
放到function里面,另一行还在外面,即:
var requestUrl = "http://www.url.com/request";

function show(){

var mobile = document.getElementById("pn").value;
alert(requestUrl);
alert(mobile);
}
show();//这回弹两次都正确弹出了,这两个声明有什么区别吗?
看了前辈的解答,我把<input>那些东西都弄到脚本前面去了,现在倒是不出undefined了。而是无论在input输入框里输什么数字,弹出来的都是空白一片。。。
展开
 我来答
Way_C23
2015-05-24 · 超过15用户采纳过TA的回答
知道答主
回答量:22
采纳率:100%
帮助的人:26.3万
展开全部
文档加载是自顶向下的,javascript代码的执行也是自顶向下执行的,所以第一次执行时文档还没有加载到<input type...id="pn">那个地方,所以document.getElementById("pn")是获取不到对象的,因为对那个时刻而言这个对象还不存在。下面执行正确,你也就知道为什么了,希望可以帮到你。
追问

//此处省略原题代码
不直接在脚本里执行show();了,下面另搞一个按钮onclick,页面刷新结束应该就是全加载了吧,点按钮,一样是undefined

追答
关键是看你那个mobile变量赋值的时刻在页面加载之前还是之后,而不是看show调用的时刻
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-05-24
展开全部
我觉得你这样写是会出错了,或许你用的浏览区没有报错,但是会出现这样的错误
document.getElementById(...) is null
原因是会先编译脚本,就会找不到id为“pn”的
应把<input type="telephone" id="pn" />
放在脚本前面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
澄清韵Zk
2015-05-24 · TA获得超过189个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:166万
展开全部

在用 document.getElementById 获取页面元素的时候,要确保 document 已经载入完毕,否则会出现取不到元素的情况。

<body onload="init()">    <input type="telephone"  id="pn" />    <input type="button" value="test" onclick="show()"   />
</body>
 var requestUrl = "http://www.url.com/request",mobile;
function init(){
  mobile = document.getElementById("pn").value;
}
function show(){    alert(requestUrl);    alert(mobile);}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式