Javascript 在另一个函数中使用一个函数中的变量——想想我遗漏了什么
这很可能很简单,但我有点挣扎,是否有可能做下面的事情,因为它没有在第二个功能警报Javascript 在另一个函数中使用一个函数中的变量——想想我遗漏了什么,javascript,jquery,Javascript,Jquery,这很可能很简单,但我有点挣扎,是否有可能做下面的事情,因为它没有在第二个功能警报 function func1() { var test = 5; var testAgain = 8; } function func3() { func1(); alert(test); } 编辑: 谢谢大家的评论,但我似乎无法让它发挥作用 我下面是我试图让它工作的代码 它似乎不想从setImageReelWidth传递变量,当它到达rotate=function()或$(“.paging
function func1() {
var test = 5;
var testAgain = 8;
}
function func3() {
func1();
alert(test);
}
编辑:
谢谢大家的评论,但我似乎无法让它发挥作用
我下面是我试图让它工作的代码
它似乎不想从setImageReelWidth传递变量,当它到达rotate=function()或$(“.paging a”)。单击(function()。所以我单击它,它会通知4(这是正确的),然后当它再次运行两次时,我只得到0
var divWidth = 0;
var slideTotal = 0;
var divReelWidth = 0;
function setImageReelWidth() {
var divWidth = $(".window").width();
var slideTotal = $(".slide").size();
var divReelWidth = divWidth * slideTotal;
alert(slideTotal);
//Adjust the image reel to its new size
$(".image_reel").css({ 'width': divReelWidth });
}
$(document).ready(function () {
//////////////////////////// INITAL SET UP /////////////////////////////////////////////
//Get size of images, how many there are, then determin the size of the image reel.
//var divWidth = $(".window").width();
//var slideTotal = $(".slide").size();
//var divReelWidth = divWidth * slideTotal;
//Adjust the image reel to its new size
//$(".image_reel").css({ 'width': divReelWidth });
//set the initial not active state
$('#prev').attr("class", "not_active");
//////////////////////////// SLIDER /////////////////////////////////////////////
//Paging + Slider Function
rotate = function () {
setImageReelWidth();
alert(slideTotal);
var triggerID = $slideNumber - 1; //Get number of times to slide
var image_reelPosition = triggerID * divWidth; //Determines the distance the image reel needs to slide
//sets the active on the next and prev
if ($slideNumber == 1) {
$('#prev').attr("class", "not_active")
$('#next').attr("class", "active")
}
else if ($slideNumber == slideTotal) {
$('#next').attr("class", "not_active");
$('#prev').attr("class", "active");
}
else {
$('#prev').attr("class", "active")
$('#next').attr("class", "active")
};
//Slider Animation
$(".image_reel").animate({
left: -image_reelPosition
}, 500);
};
//////////////////////////// SLIDER CALLS /////////////////////////////////////////////
//click on numbers
$(".paging a").click(function () {
setImageReelWidth();
alert(slideTotal);
setImageReelWidth();
$active = $(this); //Activate the clicked paging
$slideNumber = $active.attr("rel");
rotate(); //Trigger rotation immediately
return false; //Prevent browser jump to link anchor
});
您需要声明具有全局作用域的变量
var test = 0;
function func1() {
test = 5;
}
function func3() {
func1();
alert(test);
}
进一步阅读您需要声明具有全局范围的变量
var test = 0;
function func1() {
test = 5;
}
function func3() {
func1();
alert(test);
}
进一步阅读使变量可用于两种方法,如中所建议的那样,通过全局定义变量 另一种解决方案是从第一个函数返回它,然后在第二个函数中使用它,如下所示:
function func1() {
var test = 5;
return test;
}
function func3() {
var x = func1();
alert(x);
}
编辑
另一种方法是编写工厂函数来创建func3:
var func3 = (function(){
var test;
function func1() {
test = 5;
}
return function() {
func1();
alert(test);
}
})();
这里发生的情况如下:
我创建了一个函数,可以立即执行:
(function(){
// ...
})();
在那里,我有变量test
和另一个名为func1
的函数,我返回一个绑定到变量func3
的函数,func3
现在可以访问vartest
以及func1
,但在该工厂之外没有任何东西e可以访问它们
查看我创建的小提琴:
像这样的东西一开始有点难以理解,但这确实是JavaScript(IMHO)的强大功能。通过全局定义变量(如中所建议),使变量可用于这两种方法是很好的 另一种解决方案是从第一个函数返回它,然后在第二个函数中使用它,如下所示:
function func1() {
var test = 5;
return test;
}
function func3() {
var x = func1();
alert(x);
}
编辑
另一种方法是编写工厂函数来创建func3:
var func3 = (function(){
var test;
function func1() {
test = 5;
}
return function() {
func1();
alert(test);
}
})();
这里发生的情况如下:
我创建了一个函数,可以立即执行:
(function(){
// ...
})();
在那里,我有变量test
和另一个名为func1
的函数,我返回一个绑定到变量func3
的函数,func3
现在可以访问vartest
以及func1
,但在该工厂之外没有任何东西e可以访问它们
查看我创建的小提琴:
像这样的东西一开始有点难以理解,但这确实是JavaScript(IMHO)的强大功能.+1这是一种比我对全局变量的回答好得多的方法。问题是sluap试图实现什么。我们需要看更大的图景来决定什么适合这里。你不应该删除你的答案。此外,有一些方法可以让一个变量在两个函数中,而不让它们在全局空间中。谢谢你们的输入但是,我对我的代码做了一些修改,比方说我只是想拉出测试变量,第一个函数中设置了一些变量,第二个对我来说没有意义,我需要两个函数seperate@sluap:在这种情况下,它可能不适合您的需要。但是,这是一种在两个函数之间共享变量而不公开变量的方法这是一个比我对全局变量的回答好得多的方法。好吧,问题是sluap试图实现什么。我们需要看更大的图景来决定什么适合这里。你不应该删除你的答案。此外,有一些方法可以让一个变量在两个函数中,而不让它们在全局空间中。谢谢你对于您的输入,我对我的代码做了一点修改,假设我只是想拉出测试变量,第一个函数中设置了一些变量,第二个对我来说没有意义,我需要两个函数seperate@sluap:在这种情况下,它可能不适合您的需要。但是,这是一种在两个函数之间共享变量的方法不要把它暴露在全局空间中。我想你应该写
alert(test);
而不是alert('test'));
,因为带有字符串“test”的alert不使用您的变量。但是,这确实解决了您的问题,请参见下面的答案。当您在函数中使用var
关键字时,它会创建一个新的局部变量,而不是使用全局变量。只需从函数中删除var
单词即可我猜你是想写alert(test);
而不是alert('test');
,因为带有字符串“test”的alert不使用您的变量。但是,这确实解决了您的问题,请参见下面的答案。当您在函数中使用var
关键字时,它会创建一个新的局部变量,而不是使用全局变量。只需从函数中删除var
单词即可就像做错事一样