为何Dart仅能通过void main启动程序,无法像JS直接运行多函数?
为什么JS可以直接运行多个函数,而Dart必须从main入口开始?
核心原因是两种语言的执行模型完全不同:
JavaScript:脚本式逐行执行
JS是解释型脚本语言,不管在浏览器还是Node.js环境里,它会从上到下执行所有顶级作用域的代码:
- 如果顶级作用域里直接写执行语句(比如
console.log('hello')),会立刻运行; - 如果是函数声明(比如
function foo() {}),只会定义这个函数但不会执行;但如果写成自执行形式(比如function foo() {}()或者(() => {})()),就会直接运行。
简单说,JS没有强制要求入口点,所有顶级代码都会被依次执行。
Dart:编译型语言的入口点机制
Dart属于编译型语言(支持JIT即时编译和AOT提前编译),这类语言的设计逻辑是:程序必须有一个明确的起始执行点,也就是main函数——这是Dart语言规范强制要求的,就像Java、C++这些传统编译语言也必须有main作为入口。
- 你代码里的
function()只是定义了一个函数,但没有被任何地方调用,所以不会执行; - 要让其他函数运行,必须在
main函数里主动调用它。
修改你的Dart代码,就能执行两个函数的内容了:
void main() { var value = "Dart is a worst version of JS"; print('The value of the input is: $value'); // 调用自定义函数 function(); } void function() { var value = "Dart is a worst version of JS heres why"; print('The value of the input is: $value'); }
总结一下:JS是脚本,逐行跑顶级代码;Dart是编译型语言,必须从main启动,所有逻辑都要通过main触发。
内容的提问来源于stack exchange,提问作者Zipp23
相关产品推荐
相关产品推荐

