Javascript 为什么可以';在函数外部声明的t变量是否可以在函数内部使用?
此代码应该可以工作,但错误消息是“无法解构”Javascript 为什么可以';在函数外部声明的t变量是否可以在函数内部使用?,javascript,ecmascript-6,electron,node-modules,Javascript,Ecmascript 6,Electron,Node Modules,此代码应该可以工作,但错误消息是“无法解构” const fs = require('fs'); let { remote: { app } } = require('electron'); let userDataPath = app.getPath('userData'); let filePath = path.join(userDataPath, 'preferences.json') const readPreferences = () => { return
const fs = require('fs');
let { remote: { app } } = require('electron');
let userDataPath = app.getPath('userData');
let filePath = path.join(userDataPath, 'preferences.json')
const readPreferences = () => {
return JSON.parse( fs.readFileSync(filePath) )
}
const writePreferences = (inputs) => {
inputs && fs.writeFileSync(filePath, JSON.stringify(inputs));
}
module.exports = {readPreferences, writePreferences };
但是,如果我在每个函数中添加所有let
变量,代码就会工作
这正常吗?为什么会这样
应该在那里重复这些吗
我在一个单独的演示中尝试了这一点,一切都很好:
// - two.js
let two = "this is something"
exports.one = () => {
return two
}
// - index.js
const { one } = require('./two')
let two = "anything"
console.log(one()) // -> this is something
编辑:这是可行的
const fs = require('fs');
const readPreferences = () => {
let { remote: { app } } = require('electron');
let userDataPath = app.getPath('userData');
let filePath = path.join(userDataPath, 'preferences.json')
return JSON.parse( fs.readFileSync(filePath) )
}
const writePreferences = (inputs) => {
let { remote: { app } } = require('electron');
let userDataPath = app.getPath('userData');
let filePath = path.join(userDataPath, 'preferences.json')
inputs && fs.writeFileSync(filePath, JSON.stringify(inputs));
}
module.exports = {readPreferences, writePreferences };
我认为代码中的问题在于,您试图在最外层的作用域中初始化一个匿名对象
function require(){/*require代码在这里*/}
让{remote:{app}}=require('electron');
electron的remote
不是普通的javascript对象,它在被请求时构造代理对象,并且不导出其模块导出中的所有可代理命名空间:检查内部
也就是说,静态导入中的解构是不能保证的。包装函数可以工作的原因是,它的代理对象是在应用程序初始化阶段之后构造的,而顶层并没有,也不能确定,因为无法看到完整的代码流
在任何情况下,都不能尝试对代理对象进行解构。唯一相关的是“无法解构”。转到特定行,并在SSCCE中将其拉出。在右侧尝试不同的值,直到找到“相关原因”(即最小故障案例)。这将非常方便。它在其他页面上工作,并且在函数中声明时工作?请使用“var”关键字而不是“let”进行检查。因为与“var”不同(后者全局定义变量,或局部定义整个函数,而不考虑块范围)。如果我们在函数外部使用“let”声明变量,那么它在函数内部找不到该变量的值,而该变量未绑定到函数的作用域。选择作为写入答案是因为它提供了信息。谢谢。我后来使用了
electron.remote.app
whereelectron=require(“electron”)