Javascript 当我导出调用func B和C的函数A,而不显式地导出B和C时,技术上会发生什么? 我目前在ZURB基金会6.4框架上运行,该框架运行在GULP、Babel7和WebPACK 4。 我正在试验ES6的导出/导入功能
现在我有下面的JS导出下面的代码,然后是JS导入它:Javascript 当我导出调用func B和C的函数A,而不显式地导出B和C时,技术上会发生什么? 我目前在ZURB基金会6.4框架上运行,该框架运行在GULP、Babel7和WebPACK 4。 我正在试验ES6的导出/导入功能,javascript,ecmascript-6,Javascript,Ecmascript 6,现在我有下面的JS导出下面的代码,然后是JS导入它: //JS exporting function consoletest(){ console.log("HelloRequire!") } function commonAJAXCall(){ return $.get('https://jsonplaceholder.typicode.com/todos/1', { }).then((response) => { response = JSO
//JS exporting
function consoletest(){
console.log("HelloRequire!")
}
function commonAJAXCall(){
return $.get('https://jsonplaceholder.typicode.com/todos/1', {
}).then((response) => {
response = JSON.stringify(response)
console.log(response)
console.log("AJAX happened")
return response
})
}
export async function productnamesGetter(){
let productNameElements = document.getElementsByClassName('customProductCardName')
await commonAJAXCall()
console.log("result is ", productNameElements)
}
//JS importing
import * as myModule from './lib/eCommerceLogic.js'
$("#AJAXproductnames").on("click", function(){
myModule.productnamesGetter()
})
现在我已经尝试了如果我尝试调用函数B或C会发生什么:我得到一个未定义的错误
那太好了,我觉得这太棒了!
但我真的很感兴趣的是如何在ES6的技术方面做到这一点。它如何使调用函数A可以访问函数B和C,但仍然无法访问导出函数A中未“嵌套”的显式调用?
模块中的代码在导入时执行。所以,我们可以用这个生命来表达它:
const imported=(()=>{
“严格使用”;
//模块代码
出口退税;
})();
好的,它不是这样做的,但类似地
所以,你可以这样想象:
constfoo=(()=>{
“严格使用”;
常量foo=()=>{
log('foo called');
bar()
};
常数条=()=>{
console.log('bar called')
};
返回foo;
})();
foo()//福叫,巴叫
bar()//ReferenceError:未定义条
<代码> Foo>代码>将接收所谓的闭包,这是一组变量(在这种情况下是函数),它是从函数被定义的地方继承的,而不是在调用的地方。
< P>根据我的理解,我可以把ES6模块看作是著名的“模块模式”的近似情况。 考虑下面的示例,其中由函数外部
组成的IIFE封装了两个函数,一个函数名为-内部
,另一个函数名为导出
,而我只返回导出的
函数。这里我调用了导出函数中的\u inner
虽然我在执行IIFE后获得了导出的函数的引用,但由于声明导出的函数时形成的闭包,对\u内部的的引用仍然存在。发生并返回了外部调用,但导出的仍然通过闭包引用了\u内部调用
const exported=(函数外部(){
函数_inner(){
控制台日志(“内部”);
}
函数导出(){
_内();
console.log(“来自导出”);
}
出口退税;
})();
导出()代码>您在哪里尝试调用产生错误的B或C?从productnamesGetter
调用commonAJAXCall
可以正常工作。