Javascript 当我导出调用func B和C的函数A,而不显式地导出B和C时,技术上会发生什么? 我目前在ZURB基金会6.4框架上运行,该框架运行在GULP、Babel7和WebPACK 4。 我正在试验ES6的导出/导入功能

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导出下面的代码,然后是JS导入它:

//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
可以正常工作。