Javascript 将私有变量转换为公共变量

Javascript 将私有变量转换为公共变量,javascript,jquery,function,scope,Javascript,Jquery,Function,Scope,我试图发现如何将一些私有变量发送到全局范围。我创建了一个简短的演示: function test() { let private1 = 1, private2 = 2; return private1; } test(); // returns the first variable value, but not if I have multiple variables console.log(private1); // returns obvious error - how

我试图发现如何将一些私有变量发送到全局范围。我创建了一个简短的演示:

function test() {
    let private1 = 1, private2 = 2;

    return private1;
}

test(); // returns the first variable value, but not if I have multiple variables
console.log(private1); // returns obvious error - how to make private variable global?
显然,记录任何变量都会返回错误,因为它们只存在于相对于测试函数的局部范围内。所以我的问题是,如何公开这些变量


我从来没有这样使用过变量,我也找不到任何其他帖子来解释这一点,所以这通常是一种糟糕的做法吗?我很想知道。任何关于如何最好地处理变量的解释或指导都会非常有用,谢谢。

函数内声明的变量只能在该函数内使用,除非在函数外声明

在本例中,不能在函数外使用private1

功能测试(){
设private1=1;
返回私家车1;
}
test();

控制台日志(private1)您可以创建全局变量并为其赋值

let global1,global2;
function test() {
    let private1 = 1, private2 = 2;
    global1 = private1;
    global2 = private2;

    return private1;
}

test(); 
console.log(global1); 
也可以使用返回值

function test() {
    let private1 = 1, private2 = 2;

    return private1;
}

var result = test(); 
console.log(result);

让private1全球化的最简单方法就是这样做

let global1

function test() {
    let private1 = 1, private2 = 2;

    return private1;
}

global1 = test()
console.log(private1,private2);
//1 2 is the answer.

但是,正如另一个答案所说,如果您想要这样做,最好在函数范围之外声明变量。

如果您在浏览器上,您可以将它们分配到
窗口

功能测试(){
window.private1=1,window.private2=2;
}
测试()

console.log(private1,private2)
let的范围是固定的,您不能在函数之外访问它。问题的解决方案是将变量绑定到窗口

功能测试(){
private1=1;//或者您可以使用window.private1=1
private2=2;
返回私家车1;
}
test();

控制台日志(private1)为什么先私有后公有?如果您需要一些私有空间,可以将结果对象的IIFE和解构赋值给全局变量

var{private1:global1,private2:global2}=function(){
让private1='foo',
private2=酒吧;
返回{private1,private2};
}();

console.log(global1,global2)有两种方法可以从函数内部(不返回对象或数组中的变量)将变量添加到全局(仅全局范围)。不过,通过向全局范围添加变量,可以使该页上运行的每个脚本都可以使用该变量

1.确保未激活
严格模式
,并且“忘记”声明变量 如果没有使用严格模式,那么每当JavaScript看到一个尚未声明的变量时,它就会在全局范围内自动声明它。尽管如此,这是非常糟糕的做法,应该避免

2.将变量直接添加到全局对象 可以使用
窗口
获取窗口对象。但是
仅在未从
对象
或绑定/应用函数内部调用时才会返回
窗口

返回和分解(ES6) ES6的一个很好的功能(这意味着不能在IE等旧浏览器上使用)是解构,它允许您执行以下操作:

function test() {
    return { private1: 1, private2: 2 };
}
var { private1: private1, private2: private2 } = test();


不要在开头添加任何声明。Javascript将其视为全局变量

function test(){
   private1 = 1;
   private2 = 2
}

test();
调用函数
test
后,将
private1和private2设置为全局变量

function test(){
   private1 = 1;
   private2 = 2
}

test();
如果你把一个控制台放在下面进行这样的测试

let global1

function test() {
    let private1 = 1, private2 = 2;

    return private1;
}

global1 = test()
console.log(private1,private2);
//1 2 is the answer.
它将打印在控制台上,您也可以这样调用它

window.private1;
window.private2;
就这样