是否可以在JavaScript函数中定义全局变量?

我想在其他函数中使用trailimage变量(在makeObj函数中声明)。

<html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"><title></title><script type="text/javascript">var offsetfrommouse = [10, -20];var displayduration = 0;var obj_selected = 0;function makeObj(address) {**var trailimage = [address, 50, 50];**document.write('<img id="trailimageid" src="' + trailimage[0] + '" border="0"  style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: ' + trailimage[1] + 'px; height: ' + trailimage[2] + 'px">');obj_selected = 1;}function truebody() {return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;}function hidetrail() {var x = document.getElementById("trailimageid").style;x.visibility = "hidden";document.onmousemove = "";}function followmouse(e) {var xcoord = offsetfrommouse[0];var ycoord = offsetfrommouse[1];var x = document.getElementById("trailimageid").style;if (typeof e != "undefined") {xcoord += e.pageX;ycoord += e.pageY;}else if (typeof window.event != "undefined") {xcoord += truebody().scrollLeft + event.clientX;ycoord += truebody().scrollTop + event.clientY;}var docwidth = 1395;var docheight = 676;if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) {x.display = "none";alert("inja");}elsex.display = "";x.left = xcoord + "px";x.top = ycoord + "px";}if (obj_selected = 1) {alert("obj_selected = true");document.onmousemove = followmouse;if (displayduration > 0)setTimeout("hidetrail()", displayduration * 1000);}</script></head><body><form id="form1" runat="server"><img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px;top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" /></form></body>
</html>

#1楼

如果要创建启动函数,则可以通过以下方式定义全局函数和变量:

function(globalScope)
{//define somethingglobalScope.something() { alert("It works");};
}(window)

因为该函数是使用此参数全局调用的,所以这里是全局范围。 因此,事物应该是全球事物。


#2楼

UPDATE1:如果您阅读注释,则围绕此特定命名约定进行了很好的讨论。

UPDATE2:似乎自从我的答案发布以来,命名约定就变得更加正式了。 教书,写书等的人谈论var声明和function声明。

UPDATE3:这是支持我的观点的其他Wikipedia帖子: http : //en.wikipedia.org/wiki/Declaration_( computer_programming)#Declarations_and_Definitions

...并回答主要问题。 函数前的DECLARE变量。 这将起作用,并且将遵循在范围顶部声明变量的良好做法:)


#3楼

经典示例:

window.foo = 'bar';

使用IIFE遵循最佳实践的现代,安全示例:

;(function (root) {'use strict'root.foo = 'bar';
)(this));

如今,还可以选择使用WebStorage API

localStorage.foo = 42;

要么

sessionStorage.bar = 21;

在性能方面,我不确定它是否比将值存储在变量中明显慢。

如我可以使用...所述的广泛的浏览器支持


#4楼

    var Global = 'Global';function LocalToGlobalVariable() {//This creates a local variable.var Local = '5';//Doing this makes the variable available for one session//(a page refresh - Its the session not local)sessionStorage.LocalToGlobalVar = Local;// It can be named anything as long as the sessionStorage references the local variable.// Otherwise it won't work//This refreshes the page to make the variable take effect instead of the last variable set.location.reload(false);};//This calls the variable outside of the function for whatever use you want.sessionStorage.LocalToGlobalVar;

我意识到其中可能存在很多语法错误,但这是其总体思路...非常感谢LayZee指出这一点...您可以在http://www.w3schools找到本地存储和会话存储。 com / html / html5_webstorage.asp 。 我的代码需要同样的东西,这确实是个好主意。


#5楼

这是一个可能很丰富的示例代码。

  var Human = function(){name = "Shohanur Rahaman";  // global variablethis.name = "Tuly"; // constructor variable var age = 21;};var shohan = new Human();document.write(shohan.name+"<br>");document.write(name);document.write(age); // undefined cause its local variable

在这里,我找到了一个不错的答案: 如何在JavaScript中声明一个全局变量


#6楼

这是另一个使变量在其他函数中可用而又不必使用全局变量的简便方法:

 function makeObj() { // var trailimage = 'test'; makeObj.trailimage = 'test'; } function someOtherFunction() { document.write(makeObj.trailimage); } makeObj(); someOtherFunction(); 

#7楼

只需在函数外部声明它,然后在函数内部分配值即可。 就像是:

<script type="text/javascript">var offsetfrommouse = [10, -20];var displayduration = 0;var obj_selected = 0;var trailimage = null ;  // GLOBAL VARIABLEfunction makeObj(address) {trailimage = [address, 50, 50];  //ASSIGN VALUE

或者简单地从函数内部的变量名中删除“ var”也会使其具有全局性,但是最好在外部将其声明一次以获取更清晰的代码。 这也将起作用:

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;function makeObj(address) {trailimage = [address, 50, 50];  //GLOBAL VARIABLE , ASSIGN VALUE

我希望这个例子能进一步解释: http : //jsfiddle.net/qCrGE/

var globalOne = 3;
testOne();function testOne()
{globalOne += 2;alert("globalOne is : " + globalOne );globalOne += 1;
}alert("outside globalOne is : " + globalOne);testTwo();function testTwo()
{globalTwo = 20;alert("globalTwo is " + globalTwo);globalTwo += 5;
}alert("outside globalTwo is :" + globalTwo);

#8楼

只需声明

var trialImage;

外。 然后

function makeObj(address) {trialImage = [address, 50, 50];
..
..
}

希望这可以帮助。


#9楼

不,你不能。 只需在函数外部声明变量即可。 您不必在分配值的同时声明它:

var trailimage;function makeObj(address) {trailimage = [address, 50, 50];

#10楼

是的,正如其他人所说,您可以在全局作用域(所有函数之外)使用var来声明一个全局变量:

<script>
var yourGlobalVariable;
function foo() {// ...
}
</script>

或者,您可以在window上分配一个属性:

<script>
function foo() {window.yourGlobalVariable = ...;
}
</script>

...因为在浏览器中,用var声明的所有全局变量全局变量都是window对象的属性。 (在最新规范ECMAScript 2015中,全局范围内的新letconstclass语句创建了不是全局对象属性的全局变量;这是ES2015中的新概念。)

(也有隐式全局变量的恐怖 ,但不要故意这样做,并尽最大努力避免意外地这样做,也许可以使用ES5的"use strict" 。)

话虽如此:如果可能(我几乎可以肯定),我会避免使用全局变量。 正如我提到的那样,它们最终是window属性,并且window已经足够拥挤 ,所有具有id (并且很多都只有name )的元素都被转储到其中(无论即将发布的规范如何,IE都将转储几乎所有内容)上面有一个name )。

而是将代码包装在作用域函数中,并使用该作用域局部变量,并在其中封闭其他函数:

<script>
(function() { // Begin scoping functionvar yourGlobalVariable; // Global to your code, invisible outside the scoping functionfunction foo() {// ...}
})();         // End scoping function
</script>

#11楼

在函数外部定义trailimage变量并在makeObj函数中设置其值非常简单。 现在,您可以从任何地方访问其价值。

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;
function makeObj(address) {trailimage = [address, 50, 50];....
}

#12楼

因此,您希望函数内部的变量在函数外部可用吗? 为什么不返回函数内部变量的结果? var x = function returnX { var x = 0; return x; } var x = function returnX { var x = 0; return x; }是这个主意...

    <html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"><title></title><script type="text/javascript">var offsetfrommouse = [10, -20];var displayduration = 0;var obj_selected = 0;function makeObj(address) {var trailimage = [address, 50, 50];document.write('<img id="trailimageid" src="' + trailimage[0] + '" border="0"  style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: ' + trailimage[1] + 'px; height: ' + trailimage[2] + 'px">');obj_selected = 1;return trailimage;}function truebody() {return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;}function hidetrail() {var x = document.getElementById("trailimageid").style;x.visibility = "hidden";document.onmousemove = "";}function followmouse(e) {var xcoord = offsetfrommouse[0];var ycoord = offsetfrommouse[1];var x = document.getElementById("trailimageid").style;if (typeof e != "undefined") {xcoord += e.pageX;ycoord += e.pageY;}else if (typeof window.event != "undefined") {xcoord += truebody().scrollLeft + event.clientX;ycoord += truebody().scrollTop + event.clientY;}var docwidth = 1395;var docheight = 676;if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) {x.display = "none";alert("inja");}elsex.display = "";x.left = xcoord + "px";x.top = ycoord + "px";}if (obj_selected = 1) {alert("obj_selected = true");document.onmousemove = followmouse;if (displayduration > 0)setTimeout("hidetrail()", displayduration * 1000);}</script>
</head>
<body><form id="form1" runat="server"><img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px; top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" /></form>
</body>
</html>

我尚未对此进行测试,但是如果您的代码在进行此小更改之前就可以使用,那么它应该可以使用。

在JavaScript函数中定义全局变量相关推荐

  1. JavaScript在函数中定义全局变量

    得到的结果是: 因为在函数中 var a ,a是一个局部变量,而b,c是全局变量. var a=b=c=9 相当于 var a=9:b=9;c=9; 此时,a是局部变量,b.c 没有var声明,当全局 ...

  2. php在函数中定义全局变量,PHP 全局变量在用户自定义函数内部不足见

    PHP 全局变量在用户自定义函数内部不可见 全局变量是定义在任何函数之外,其作用域是整个PHP文件,但在函数内部不可见,若要使其可见就需要用global 声明. $val1 = 1; $val2 = ...

  3. Javascript中函数中的全局变量。

    在JavaScript中我们知道有全局变量和局部变量,在不同的作用域中可以调用不同的变量.但是在定义全局变量时我们需要注意一种情况,那就是在函数中定义的变量.如下: 不知道小伙伴们是否了解在函数中用这 ...

  4. MFC中定义全局变量和全局函数的方法

    使用Visual C++6.0 中的MFC 基本应用时, 由于 MFC 制作的工程由很多文件构成, 它不能象一般C++程序那样随意在类外定义全局变量, 那样有时会在运行程序时出现问. 在软件开发过程中 ...

  5. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  6. 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )

    文章目录 一.C 项目开发代码规范 一.C 项目开发代码规范 上一篇博客 [C 语言]字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规 ...

  7. 在JavaScript函数中使用EL表达式注意的事项

    最近在使用JSP显示从Servlet带过来的数据时,大量的使用到了EL表达式,并且有些EL表达式是在使用到JavaScript的函数时作为参数传入的,举个例子,比如下面的样子: 这个HTML标签的意思 ...

  8. 2020-08-14 理解 javascript 函数中的 curry

    理解 javascript 函数中的 curry 函数柯里化: 所谓函数柯里化就是把一个函数的多个传参变成多个函数的单个传参. 函数的柯里化,是 Javascript 中函数式编程的一个重要概念.它返 ...

  9. 能不能在头文件中定义全局变量?

    首先,这是一篇科普文,所以 比较杂,我尽量写清楚一些. 1.ANSI C标准是什么?GNU又是什么?ld是什么? ANSI C是C语言的标准规范,是国际标准化组织制定的国际标准. 虽然 ANSI C规 ...

最新文章

  1. 2015 百度之星 1004 KPI STL的妙用
  2. HTTP MIME type
  3. SpringMVC(三)——JSON
  4. 不会Nacos的配置中心?你怎么敢的呀!如何一步步实现Nacos作为服务的配置中心(全网最详系列)
  5. 永磁同步电机三相等效电路图_基于MTPA的永磁同步电动机矢量控制系统分解
  6. JAVA集合(笔记)
  7. 【转】编译DCMTK
  8. python2.7是什么_python2.7是什么
  9. 网线重新插拔后恢复正常_14日科技精选:路由器经常掉线,必须重新插拔网线才能上网。什么原因?...
  10. iPhone 13 Pro原型机曝光:全新玫瑰金配色,女性首选
  11. 从IBM SCE+落地中国看IDC的转型
  12. bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
  13. 在苹果Mac上如何指定发送邮件的时间?
  14. 软件技术文档编写_如何编写好的软件技术文档
  15. Win7安装msu文件失败引发的一系列问题
  16. element ui的el-option需要默认
  17. 【游戏开发创新】自学Blender建模,自制孔明灯,在Unity中点亮整个星空,愿新年,胜旧年(Unity | 建模 | 粒子系统 | 预设)
  18. [已解决]VitrualBox 启动linux虚拟机后,无法访问网络解决方法
  19. 数据库课程设计------书店管理系统
  20. uniapp实现加载图片失败显示占位图

热门文章

  1. Android Stadio 所有的窗口都没有了
  2. Java、Android静态代理与动态代理
  3. 大体了解Android应用安装过程及原理
  4. 第十四周项目一-排序函数模版
  5. Android GLSurfaceView.Renderer 类 onDrawFrame 方法的刷新机制
  6. ( Android-大神博客)
  7. 鸿蒙武器排行榜,刺客伍六七武器排行榜,剪刀垫底,魔刀仅排第二,图四才是最强武器...
  8. Linux查看端口号是否使用
  9. sql 计算空间列两地点之间距离
  10. 深入理解c#(第三版)(文摘)