A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴清华 中级黑马   /  2013-1-5 15:24  /  1936 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

var x=1;
var y=0;
var z=0;
function add(n){n=n+1;return n}
y=add(x);
function add(n){n=n+3;return n;}
z=add(x);
alert(y+‘   ’+z);
请问这段代码的结果怎么不是2,4?而是4,4!不是顺序执行吗?

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

5 个回复

倒序浏览
你的2个函数 是一模一样的,经调试发现,把第一个函数 注释掉  其结果也是4,4, 也就是说 浏览器都是调用的第2个函数。  按照正常逻辑思考,这也是很正常的吧, 第二个函数把第一个函数给覆盖掉了。   

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
邓艳秋 + 1
潘梦军 + 1

查看全部评分

回复 使用道具 举报
楼上说得很对。。。
网页代码有一个执行顺序的问题,它们严格遵从由上到下的解析顺序。
在你的代码当里存在同名函数,这在java或c#中就会涉及到重载和覆盖的问题,但在js中,在严格遵从由上到下的解析过程中只要存在同名函数,无论参数是否一致,后面的函数都将覆盖前一个函数,这时你调用的或你能够调用的都只有后一个函数

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
按楼上的来说 就是JS不存在 方法重载的吧?
回复 使用道具 举报
林嘉健 发表于 2013-1-9 18:07
按楼上的来说 就是JS不存在 方法重载的吧?

没错,可以测试一下。。。
回复 使用道具 举报
既然程序是从上到下顺序执行,那当页面加载到y=add(x)的时候,不是只有第一个函数么,第二个函数还没加载进来,怎么会覆盖第一个函数呢。

我试了一下,在<head>标签下写的<script>标签内的代码,

不论两个add()函数是放在调用代码前还后,都会执行最后一个add()函数

是不是可以理解为浏览器会先加载完所有的函数,然后在执行调用代码??

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马