导入模块时的Javascript作用域

导入模块时的Javascript作用域,javascript,module,scope,webpack,Javascript,Module,Scope,Webpack,有人能解释一下为什么我不能在下面的示例中打印external:bar?据我所知,导入的函数externalFunction应该添加到全局范围中,并且在调用时,应该与localFunction具有相同的范围,不是吗 entry.js 从'./myfunction.js'导入{f as externalFunction} 函数localFunction(){ console.log('local:'+foo)/'local:foo' console.log('local:'+bar)/'local:

有人能解释一下为什么我不能在下面的示例中打印
external:bar
?据我所知,导入的函数
externalFunction
应该添加到全局范围中,并且在调用时,应该与
localFunction
具有相同的范围,不是吗

entry.js

从'./myfunction.js'导入{f as externalFunction}
函数localFunction(){
console.log('local:'+foo)/'local:foo'
console.log('local:'+bar)/'local:bar'
}
foo='foo'
var bar='bar'
localFunction()
外部函数()
myfunction.js

export const f=function(){
console.log('external:'+foo)//foo'
console.log('external:'+bar)/'ReferenceError:bar未定义'
}
webpack.config.js

const webpack=require('webpack'))
const path=require('路径')
module.exports=[
{
//定义入口点
条目:{
查看器:'./entry.js'
},
//在捆绑文件旁边创建一个sourcemap文件,以便于调试
devtool:'源映射',
//定义捆绑模块的路径和文件名
输出:{
路径:'./',
文件名:“bundle.js”
},
模块:{
//定义我们要使用的所有装载机
装载机:[
{
测试:/.js$/,,
加载器:“巴别塔加载器”,
排除:/node_模块/,
查询:{
预设值:['es2015-without-strict']
}
}
]
}
}
];

然后在浏览器中运行它,捆绑包只是通过一个标记添加的。

这里有一个指向repo的链接,有这样一个示例:“据我所知,导入的函数externalFunction应该添加到全局作用域中,调用时,应该与localFunction具有相同的作用域”您在哪里读过这个?让我重新表述一下:“导入的函数
externalFunction
应该添加到当前范围(在我的示例中,我认为它是全局范围)。调用时,它应该能够访问与将
localFunction
添加到当前名称绑定上下文中的
externalFunction
名称相同的“外部”范围。顺便说一句,这不是全球性的。此名称将引用在另一个模块中定义的函数
f
,该模块具有自己的作用域,但对当前功能一无所知。为什么向函数添加引用会以某种方式改变函数的作用域?您能够访问
foo
的唯一原因是,您使其成为全球性的,而不是说
bar
现在,我终于了解了作用域在Javascript中的工作原理……这里有一个指向repo的链接,其中有一个示例:“据我所知,导入的函数externalFunction应该添加到全局作用域中,并且在调用时,应该与localFunction具有相同的作用域”您在哪里读到过这篇文章?让我重新表述一下:“导入的函数
externalFunction
应该添加到当前范围(在我的示例中,我认为它是全局范围)。调用时,它应该能够访问与将
localFunction
添加到当前名称绑定上下文中的
externalFunction
名称相同的“外部”范围。顺便说一句,这不是全球性的。此名称将引用在另一个模块中定义的函数
f
,该模块具有自己的作用域,但对当前功能一无所知。为什么向函数添加引用会以某种方式改变函数的作用域?您能够访问
foo
的唯一原因是,您使其成为全球性的,而不是说
bar
现在,我终于明白了作用域在Javascript中的工作原理。。。