帮忙解决几个js的问题

1. 两个a,b两个js文件,a里面写的是闭包的方法,b文件里怎么去调用,或者说这两个文件怎么进行数据通信(就是es5中的使用)

2.

var a = 1;
delete a;//false
alert(a)//1
// -----------------------------------
a = 1;
delete a;//true
alert(a);//d is not defined
// -------------------------------------
eval('var a = 1');
delete a;//true
alert(a);//d is not defined

上面这三段代码的结果,为什么用var定义和后两个的结果不一样?这怎么理解?

3. 想问问模块化中的require与import的区别,他们的运行机制是怎样的?

阅读 2.3k
3 个回答

从1和3这两个问题可以看出,你对模块化的了解还比较薄弱,因此建议你先去学习一下模块化的使用,完了之后,这两个问题自然就不是什么问题了。建议先学习requirejs,文档地址如下
http://www.requirejs.cn/

第二个问题,使用var声明的变量,都存储在执行上下文的变量对象中。而直接a = 1实际上是给window增加一个属性,等同于window.a = 1。所以这两句话从根本上来说是不同的。

变量对象中保存的所有属性,都不能被delete删除,而window的普通属性可以被删除。

至于eval这个函数有点特殊,我只知道它执行时会生成一个叫做调用上下文的东西,具体怎么回事我也没搞清楚,因为毕竟用的不多,很多地方都在说要避免实现它 ~ ~

问题1:可以用ES6的import, exports,也可以利用nodejs的require和exports/module.exports
问题2:一楼已给正解
问题3:Import是ES6语法,require是nodejs的全局方法,做模块导入

我只针对楼上没回答清楚的问题三做个解答,他们之间的区别如下:
require这种加载称为“运行时加载”,只有运行时才能得到这个对象。
import是ES6的加载机制,这种加载称为“编译时加载”或者静态加载,即ES6可以在编译时就完成模块加载,效率要比 CommonJS模块的require加载方式高。
ES6模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系。import的加载机制使得静态分析成为可能,例如类型检验什么的,所以在支持ES6的语法情况下,我建议用import。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题