2007-11-15
js 函数的定义、运行 顺序。
关键字: js function
js 执行的一些疑问。
js是顺序加载,解释执行的。函数定义顺序 对函数的执行 并没有影响。
对于下面一种测试的js调用情况。
----------------test.html---start-----------------
<HTML> <HEAD>
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
<script type="text/javascript" src="test.js"></script>
</HEAD> <BODY>
<button onclick="test(callBack);">click me</button>
</BODY>
</HTML>
----------------------------test.html---end--------------------
----------------------------test.js--start-----------------
function test(callback){
alert("run test function");
callback();
}
-----------------------------test.js----end----------------------
对于 callBack函数的定义位置,如果在 test.js 引入之后,则会报 函数未定义错误;如果在test.js引入之前,则函数触发运行正常正常。 对于这个现象 不是很明白,大家讨论下。
在实际的编程中,还有有用的,因为,如果我们可以在任意位置 定义 callBack 函数。对于很多功能我们 可以定义成一个模块, 调用时传入一个 回掉函数,完成相应的功能就 调用它,这样,整个程序的 耦合性比较小。
js是顺序加载,解释执行的。函数定义顺序 对函数的执行 并没有影响。
对于下面一种测试的js调用情况。
----------------test.html---start-----------------
<HTML> <HEAD>
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
<script type="text/javascript" src="test.js"></script>
</HEAD> <BODY>
<button onclick="test(callBack);">click me</button>
</BODY>
</HTML>
----------------------------test.html---end--------------------
----------------------------test.js--start-----------------
function test(callback){
alert("run test function");
callback();
}
-----------------------------test.js----end----------------------
对于 callBack函数的定义位置,如果在 test.js 引入之后,则会报 函数未定义错误;如果在test.js引入之前,则函数触发运行正常正常。 对于这个现象 不是很明白,大家讨论下。
在实际的编程中,还有有用的,因为,如果我们可以在任意位置 定义 callBack 函数。对于很多功能我们 可以定义成一个模块, 调用时传入一个 回掉函数,完成相应的功能就 调用它,这样,整个程序的 耦合性比较小。
评论
cyan19851224
2008-07-10
niuyuewanzi 写道
jonson 写道
afcn0 写道
大哥你不会指的是这样写吧
看来你也有制定新语法的资质,厉害,实在是高
这样子不符合语法吗?
<script type="text/javascript" src="test.js" />
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
看来你也有制定新语法的资质,厉害,实在是高
那就是说 我们定义回调函数 不能随便什么位置!?
语法没错,顺序错了.
要是全写在一个<SCRIPT></SCRIPT>里,FUNCTION在哪儿都成. 但是如果有多个<SCRIPT></SCRIPT>就有顺序之分了...从上到下....你不用FUNCTION,用一般变量一样也能看出来.
<script type="text/javascript" src="test.js" ></script>
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
和顺序没有关系必须这样写:<script></script>
hax
2007-11-16
还真是不开窍。
不是所有浏览器都允许<script/>的写法。所以你应该写成<script></script>。
<script src="xxx"/>
<script>...</script>
在IE和FF中会被解释为
<script src="xxx">
<script>
...
</script>
它们的解析规则是,script标签开始就是CDATA直到遇到</script>,并且对于有src的script,其内容会被忽略。
不是所有浏览器都允许<script/>的写法。所以你应该写成<script></script>。
<script src="xxx"/>
<script>...</script>
在IE和FF中会被解释为
<script src="xxx">
<script>
...
</script>
它们的解析规则是,script标签开始就是CDATA直到遇到</script>,并且对于有src的script,其内容会被忽略。
jonson
2007-11-15
afcn0 写道
好,给你个建议,看看这样能执行吗
可以了。非常感谢老大的指点。
<HTML> <HEAD>
<script type="text/javascript" src="test.js"></script>
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
</HEAD> <BODY>
<button onclick="test(callBack);">click me</button>
</BODY>
</HTML>
为什么 <script/>这样子也可以导入相应的文件,但是却会发生 未定义的错误。 底层的原理是什么。
afcn0
2007-11-15
好,给你个建议,看看这样能执行吗
<HTML> <HEAD>
<script type="text/javascript" src="test.js"></script>
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
</HEAD> <BODY>
<button onclick="test(callBack);">click me</button>
</BODY>
</HTML>
jonson
2007-11-15
afcn0 写道
楼上也是高人,发帖前最好仔细看看帖,要不会造成资源浪费,我在第一个回帖就解决了lz问题,可惜lz不领情,坚信自己语法的正确,无奈,无奈,无奈,无奈
我想知道的 是 有没有 某中方法,可以定义callback 方法,不受位置的限制。
第1帖,好像没有解决问题吧。
现在应该说是在 两个 <script>见的 函数变量的定义,是受到限制。即一个块里面要想调用 另一个块的函数,那么 被调用者应该在调用者之前就被定义。
jonson
2007-11-15
niuyuewanzi 写道
应该明白你的意思...如果有多个<SCRIPT>标签,也应该是从上到下按顺序EXECUTE的. 就是说上面的<SCRIPT>里有个FUNCTION,下面的<SCRIPT>就可以继续用上面声明过的FUNCTION,反过来是不行的. 因为他们不在同一个<SCRIPT></SCRIPT>里. 当然也有例外,<SCRIPT DEFER>..</SCRIPT>有DEFER属性出现后,就等于告诉JAVASCRIPT,该<SCIRPT>要在整个DOCUMENT被处理完后在被执行,DEFER只在IE中有用...
使用 DEFER属性 相当于就是 把这个test.js文件 在 callBack之前 load
afcn0
2007-11-15
楼上也是高人,发帖前最好仔细看看帖,要不会造成资源浪费,我在第一个回帖就解决了lz问题,可惜lz不领情,坚信自己语法的正确,无奈,无奈,无奈,无奈
niuyuewanzi
2007-11-15
jonson 写道
afcn0 写道
大哥你不会指的是这样写吧
看来你也有制定新语法的资质,厉害,实在是高
这样子不符合语法吗?
<script type="text/javascript" src="test.js" />
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
看来你也有制定新语法的资质,厉害,实在是高
那就是说 我们定义回调函数 不能随便什么位置!?
语法没错,顺序错了.
要是全写在一个<SCRIPT></SCRIPT>里,FUNCTION在哪儿都成. 但是如果有多个<SCRIPT></SCRIPT>就有顺序之分了...从上到下....你不用FUNCTION,用一般变量一样也能看出来.
jonson
2007-11-15
afcn0 写道
大哥你不会指的是这样写吧
看来你也有制定新语法的资质,厉害,实在是高
这样子不符合语法吗?
<script type="text/javascript" src="test.js" />
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
看来你也有制定新语法的资质,厉害,实在是高
那就是说 我们定义回调函数 不能随便什么位置!?
afcn0
2007-11-15
大哥你不会指的是这样写吧
看来你也有制定新语法的资质,厉害,实在是高
<script type="text/javascript" src="test.js" />
<SCRIPT LANGUAGE="JavaScript">
function callBack(){
alert('run callback!');
}
</SCRIPT>
看来你也有制定新语法的资质,厉害,实在是高
jonson
2007-11-15
afcn0 写道
常见个鸟,只要各个外部js文件都是声明,那就不会有问题,如果外部js也包括加载处理,但是不依赖别的文件中的声明或加载那也没问题,问题就是出现在后加载的需要前加载的进行一些声明设置,当然是按照顺序了,注意声明比较特殊,虽说声明是预处理,但是不同js文件当中的声明是不是预处理得看各个实现如何
但是现在 test.js文件中是一个 函数申明,并没有依赖于 callBack()函数的定义。 那么 callBack的定义位置怎么会 对 这个函数的造成影响呢
afcn0
2007-11-15
常见个鸟,只要各个外部js文件都是声明,那就不会有问题,如果外部js也包括加载处理,但是不依赖别的文件中的声明或加载那也没问题,问题就是出现在后加载的需要前加载的进行一些声明设置,当然是按照顺序了,注意声明比较特殊,虽说声明是预处理,但是不同js文件当中的声明是不是预处理得看各个实现如何
niuyuewanzi
2007-11-15
应该明白你的意思...如果有多个<SCRIPT>标签,也应该是从上到下按顺序EXECUTE的. 就是说上面的<SCRIPT>里有个FUNCTION,下面的<SCRIPT>就可以继续用上面声明过的FUNCTION,反过来是不行的. 因为他们不在同一个<SCRIPT></SCRIPT>里. 当然也有例外,<SCRIPT DEFER>..</SCRIPT>有DEFER属性出现后,就等于告诉JAVASCRIPT,该<SCIRPT>要在整个DOCUMENT被处理完后在被执行,DEFER只在IE中有用...
jonson
2007-11-15
这个只是一个测试的js程序。
只测试了firefox,没有测ie哦。
这个情况在 写js的时候,应该 比较常见阿。
只测试了firefox,没有测ie哦。
这个情况在 写js的时候,应该 比较常见阿。
afcn0
2007-11-15
这都是什么古怪问题,大哥,你这么写<script type="text/javascript" src="test.js"/> 我都怀疑ie 怎么去解释,script元素不是这么结素的,是<script src=.....></script>
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 2856 次
- 性别:

- 来自: 杭州

- 详细资料
搜索本博客
我的相册
大竹海04
共 2 张
共 2 张
最近加入圈子
最新评论
-
js 函数的定义、运行 顺 ...
niuyuewanzi 写道jonson 写道afcn0 写道大哥你不会指的是这 ...
-- by cyan19851224 -
题库贴
1。100的阶乘的程序: /* * To change this t ...
-- by jonson -
题库贴
3.SELECT PCLASS, PSCORE from (select PCL ...
-- by firefox_1983 -
题库贴
难道大家都是超级高手!!都不需要练手?还是觉得题目太简单!其实在工作之余 做做小 ...
-- by jonson -
丑陋的继承
jonson 写道bluemeteor 写道AbstractTopicPO |_ ...
-- by 抛出异常的爱






评论排行榜