如何绕过javascript变量范围
How to get around javascript variable scope
好的,所以我的网页上有div,单击时会分配一个变量。稍后单击另一个按钮以将它们包含在我发送的电子邮件中时,我需要访问这些变量。我的 var 邮件正文工作,因为它是我认为的局部变量。但是如果我用frameColor替换它,那么它将无法工作,因为它不是全局的。我该如何解决这个问题?
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
var frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mailbody);
});
如果你需要frameColour
在其他函数中可用,你必须向上移动它的作用域;为了防止将其添加到全局作用域中,你可以将相关函数包装在另一个函数中,即:
jQuery(function($) {
var frameColour;
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
// you can use frameColour here
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mail body);
});
});
只需在"单击范围"之前进行声明即可。
var frameColour;
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mailbody);
});
尝试在
函数之外进行delacare。
var frameColour
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
window.open('mailto:sales@beauxcadeaux.co.uk?subject=MyFrame&body=' + mailbody);
});
将变量定义为更高的范围,然后从函数内部更改值。
var frameColour;
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mailbody);
});
您可以通过在
函数作用域之外声明变量来创建全局变量:
var global_frameColour = "purple";
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
global_frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
mailbody += global_frameColour;
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mailbody);
});
如果你不希望你的变量是全局的,你可以创建一个自动执行的包装器。此处声明的任何变量(使用 var
关键字)将仅限定为匿名函数。见下文
(function (){ // declare an anonymous function
var scoped_frameColour = "purple";
$('#purple').click (function() {
$(".border").css("fill", "#763d81");
scoped_frameColour = "purple";
});
$("#button").click (function() {
var mailbody = "hello world.";
mailbody += scoped_frameColour;
window.open('mailto:sales@beauxcadeaux.co.uk?subject=My Frame&body=' + mailbody);
});
})(); // this line is important as it executes the anon function
console.log(scoped_frameColour); // undefined; out of scope
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量