小羊也疯狂 2017-06-08 13:27 采纳率: 100%
浏览 2324
已采纳

html中引入外部script顺序问题

第一个是测试用的html
图片说明
第二个是快排
图片说明
,第三个是各种辅助函数,专门写到sortTestHelper.js里面的了
图片说明
关于上面这几张张图(代码能跑)
我有个问题,书上说第一个script元素包含的代码解析完才会解析第二个,...
我的前面的各种排序方法都用到了后面的sortTestHelper.js里的方法(比如说swap()),
解释器在第一个script元素遇到swap()它都还没有解析到最后一个元素,它怎么知道swap()
方法是什么,它为什么不报错?

能描述一下 解释和执行的这个流程大概是什么样的?(知识背景:我知道变量提升和函数提升)

  • 写回答

2条回答 默认 最新

  • a1exlee 2017-06-08 14:01
    关注

    js按照块来执行,即你说的第一个script元素包含的代码解析完才会解析第二个,但是不是完全各个块分离开的,它包含一个预编译阶段和执行阶段,
    具体步骤如下(我在网上找的)
    step 1. 读入第一个代码块。

    step 2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到step5。

    step 3. 对var变量和function定义做“预编译处理”(永远不会报错的,因为只解析正确的声明)。

    step 4. 执行代码段,有错则报错(比如变量未定义)。

    step 5. 如果还有下一个代码段,则读入下一个代码段,重复step2。

    step6. 结束。

    所以,你的代码执行顺序应该是,先读入这些标签包含的代码,做语法分析,并进行预编译,此时swap()已经声明,然后再执行swap()就不会报错啦。</p>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序