在 JavaScript 函数中访问全局变量

Posted

技术标签:

【中文标题】在 JavaScript 函数中访问全局变量【英文标题】:Accessing global variables in JavaScript functions 【发布时间】:2012-11-02 19:19:58 【问题描述】:

我正在使用 C# asp.net mvc3。 在我的一个观点中,假设我声明了一个这样的变量:

@
    ViewBag.Title = "title"   
    string mystr;  

我需要在脚本的函数中设置变量 mystr 的值。如何从脚本访问此变量? 假设我有一个类似

的功能
<Script type="text/javascript">
function()
    var st = "This string is for the global variable"
     mystr = st;

</script>

mystr 稍后将在 html 代码中使用,如下所示: &lt;h2&gt;@mystr&lt;/h2&gt; 。 有没有类似的方法从函数中访问变量?

【问题讨论】:

您的 asp.net 代码首先在服务器上执行,然后在客户端上执行,然后执行 JavaScript,所以当您的 js 执行时,您的所有 asp.net 代码都已经运行了。 如果我错了,请纠正我,但@ 变量不是用于数据绑定吗?这将发生在服务器端,而 javascript 是客户端。 您可能想了解客户端/服务器关系在网页方面的工作方式。 .NET 试图混淆这个划分,最终让许多开发人员感到困惑。 谢谢。然后我如何在 js 函数中更新像上面的“mystr”这样的变量的值?我的意思是,我如何从函数中访问这个变量? 【参考方案1】:

mystr 在您的示例中是 服务器端 变量,在 cshtml 视图解析期间存在。所以你不能用客户端上的JS代码来影响它。你可以试试这样:

<script type="text/javascript">
window.mystr = @(mystr); // Set value while server side processing.
function()
    var st = "This string is for the global variable"
    window.mystr = st; // Get/Set value

</script>

并在您需要的任何地方在客户端使用全局变量mystr

如果您需要然后通过 JS 设置标题的文本,您可以使用 jQuery 进行设置:

<h2 id="header"></h2>

JS:

$('#header').text(window.mystr);

【讨论】:

可以这样设置window.mystr = @(mystr);吗?我想像var subpanelData= '@Html.Raw(Json.Encode(ViewData["Data"]))' 这样的东西会有助于从服务器端设置值..

以上是关于在 JavaScript 函数中访问全局变量的主要内容,如果未能解决你的问题,请参考以下文章

mfc怎么设置全局变量

JavaScript闭包

JavaScript函数内部修改全局变量的问题一道面试题

JavaScript 闭包

局部变量和全局变量

JavaScript作用域