import 某个函数为何会执行整个文件

来源:8-5 深刻掌握泛型函数重载准备——经典复杂排序器-

慕数据8524399

2023-05-28

请教老师,课程8-5中,import {quickSort} from “./泛型函数”;
然后调用quickSort方法,他会把quikSort方法所在的模块全部执行一遍,而不仅仅是调用这个方法

  • 泛型函数文件的内容如下:

//不使用泛型
function quickSort1(arr:Array):Array{
if(arr.length<2){
return arr
}
var left:Array=[]
var right:Array=[]
var mid=arr.splice(Math.floor(arr.length/2),1)[0]
for(var i=0;i<arr.length;i++){
if(arr[i]<mid){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort1(left).concat(mid,quickSort1(right))
}
var chineseArr1=[3,1,8.3555,9,20,15,2,7,13,11,19,18,5,6,17,4]
const result1=quickSort1(chineseArr1);
console.log(result1); //result1,any[]类型。

//使用泛型
function quickSort2(arr:Array):Array{ //这里不写返回值类型,会报错有隐式的any类型
if(arr.length<2){
return arr
}
var left:Array=[]
var right:Array=[]
var mid=arr.splice(Math.floor(arr.length/2),1)[0]
for(var i=0;i<arr.length;i++){
if(arr[i]<mid){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort2(left).concat(mid,quickSort2(right))
}
var chineseArr2=[3,1,8.3555,9,20,15,2,7,13,11,19,18,5,6,17,4]
const result2=quickSort2(chineseArr2);
console.log(result2); //result1,number[]类型。
var chineseArr3=[‘bad’,‘abc’,‘zxy’,‘kkk’,‘cdf’]
const result3=quickSort2(chineseArr3) //result3,string[]类型
console.log(result3);
export { quickSort2 as quickSort }

- quickSrot的调用如下:

import {quickSort} from “./泛型函数”;
var chineseArr=[‘武汉’,‘石家庄’,‘郑州’,‘太原’,‘济南’,‘沈阳’,‘大连’]
var chineseArr4=[‘bad’,‘bac’,‘zxy’,‘kkk’,‘cdf’]
const result4=quickSort(chineseArr4)
console.log(result4);

  • 执行结果,应该只打印[ ‘bac’, ‘bad’, ‘cdf’, ‘kkk’, ‘zxy’ ],事实上他连被调用的模块整个执行了一遍
    PS D:\typescript\src\chapter4> ts-node .\泛型函数重载.ts
    [
    1, 2, 3, 4,
    5, 6, 7, 8.3555,
    9, 11, 13, 15,
    17, 18, 19, 20
    ]
    [
    1, 2, 3, 4,
    5, 6, 7, 8.3555,
    9, 11, 13, 15,
    17, 18, 19, 20
    ]
    [ ‘abc’, ‘bad’, ‘cdf’, ‘kkk’, ‘zxy’ ]
    [ ‘bac’, ‘bad’, ‘cdf’, ‘kkk’, ‘zxy’ ]
写回答

1回答

keviny79

2023-05-28

当前 js或ts 使用 import 引入其他 ts 或 js模块时,会生成一个动态只读引用,指向被加载的 ts 或 js模块,但此刻并不会加入调用栈立即执行,等到开始执行被引入的 ts ,js 的方法或变量时,会按以下方式来工作:

    1.从头到尾执行被引入的js 或 ts 模块, 把能执行的代码都执行完成。

    2.然后执行当前 js 或 ts 其他代码 + 从加载模块中引入的方法或变量。


0
0

TypeScript 从入门到深度掌握,晋级TS高手

200+技术点,22 场景应用,Vue3 源码 TS 用法剖析

430 学习 · 53 问题

查看课程