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 其他代码 + 从加载模块中引入的方法或变量。
00
相似问题