`
web001
  • 浏览: 99359 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JavaScript中的关键字"VAR"使用祥

    博客分类:
  • Web
阅读更多

都不记得是什么时候看的JScript的语法教程了,里面说在声明变量时忽略var关键字是完全合法的。当时也因为觉得JavaScript是loosely-typed的语言,所以var可能真的就是个摆设。但是事实常常又证明想当然的结果是不可靠的。


    看看下面这几个例子的结果就知道问题了:

    No.1

 

var var00 = 0;
document.write(var00 + '<br>');
var var01 = 1;
function foo()
{
    document.write(var01);
    var var01 = 1;
}
foo();

 

 

    No.2

 

var00 = 0;
document.write(var00 + '<br>');
var01 = 1;
function foo()
{
    document.write(var01);
    var01 = 1;
}
foo();

    No.3

 

var00 = 0;
document.write(var00 + '<br>');
var01 = 1;
function foo()
{
    document.write(var01);
    var var01 = 1;
}
foo();

 


    这三个例子的执行结果分别是:

 

Results#region Results
No.1
0
undefined
No.2
0
1
No.3
0
undefined
#endregion

 

     原来JavaScript的变量也是有作用域的,只是它非常的笼统,就分为全局变量和函数变量。在第二个例子中得到0和1,是因为所有的变量都是全局变 量,而且那个语句块一共就定义了两个变量。而第一个第三的函数外全局变量,确实说明var关键字有没有都没有关系。而函数内的var关键字就很关键了,它 说明第二个var01是函数内的变量,所以在初始化var01前输出自然就是'undefined'了。

     那么函数里面是不是就屏蔽掉了全局的var01了呢?我们知道在C/C++可以使用::去访问全局变量,那么JavaScript可不可以呢?这里其实我 们只要明白了全局变量到底是什么东西,就好弄了。原来全局变量都是动态添加到Window对象的实例window上的属性而以,所以我们只要在函数内 用:document.write(window.var01);就可以取到其值1了。同时在这个上下文中,function内的this也是指向的 window实例,我们也可以把引用写成:this.var01。

    By the way, 重看JScript教程时,它说变量只能是[a-zA-Z_]+[a-zA-Z0-9_]*格式,可是'$'却也可以作为变量名字符,而且还可以用在开头,比如:$1234,更甚至于:$$$ 也是合法的变量名,faint。


// -->

我想知道是不是.在调用一个函数时,程序执行顺序会先检查函数内部变量中,有没有关键字var. 然后中再根据检查结果给不同的变量付予不同的作用域和变量值.因为我看到在这三个函数中,var01变量都是在输出语句之后.

function get_global_var(___name) 

return eval(___name); 

function set_global_var(___name,___value) 

eval(___name+"=___value"); 



var aa=11; 
Test(); 
WScript.Echo(aa);//22 

function Test() 

var aa=33; 

WScript.Echo(get_global_var("aa"));//11 
set_global_var("aa",22); 
WScript.Echo(get_global_var("aa"));//22 

WScript.Echo(aa);//33 
}

在上面的例子中this从来就没有指过Test,而一直都是WScript的实例。 
如果我们写一个语句:var test = new Test(); 这时Test里的this就是指的Test的一个实例了,这个实例中如果要使用Global的变量,Lostinet给出的是一个方法。 
不过最简单还是把global传入对象,这样定义Test: 
function Test(global) 

// ... 

然后这样创建实例:var test = new Test(this); 就可以在Test实例中使用global的对象和属性了。

是不是这样,在new的实例中,this就指实例,否则都指WScript?如果这样的话,换了脚本引擎,是不是情况又会不同?这个是标准吗?
 
new constructor[(arguments)]; 
new 运算符执行下面的任务: 
·创建一个没有成员的对象。 
·为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。 
·然后构造函数根据传递给它的参数初始化该对象。 

要注意的是即使当前作用域内没有调用new,但可能在其父作用域里是调用了new的,所以“在new的实例中,this就指实例,否则都指WScript?”,前半句对,而后半句不一定。
分享到:
评论

相关推荐

    javascript正则匹配页面关键字

    在JavaScript编程中,正则表达式(Regular ...通过以上讲解,你应该掌握了如何在JavaScript中使用正则表达式匹配页面关键字的基本方法。实践中,你可以结合实际需求调整正则表达式和匹配策略,提高匹配的准确性和效率。

    JavaScript中关键字 in 的使用方法详解

    在JavaScript编程中,关键字"in"是一个非常有用的工具,它可以用来判断某个属性是否存在于一个对象中,无论是该对象的直接属性还是通过原型链继承的属性。在本文中,我们将详细解析关键字"in"的使用方法。 首先,...

    正则检测关键字

    例如,如果你想检测一个字符串中是否包含"关键字",你可以创建一个简单的正则表达式`/关键字/`。 在JavaScript中,我们可以使用全局变量`RegExp`来创建正则对象,或者直接使用字面量表示法。比如,创建一个检测...

    javaScript基础关键字介绍.docx

    在JavaScript编程语言中,关键字(也称作保留字)扮演着至关重要的角色。这些关键字拥有特殊的含义,主要用于定义语言的基本结构或者执行特定的操作。根据JavaScript语言规范,开发者不能将这些关键字用作变量名、...

    如何使用Javascript中的this关键字

    在JavaScript中,`this`关键字是一个非常重要的概念,它用于引用函数执行时的上下文对象。`this`的值取决于函数被调用的方式,而不是函数定义的位置。在不同的场景下,`this`的指向会发生变化,这使得它成为...

    javascript关键字高亮代码

    从给定的信息来看,本文档主要探讨了一个虚构的故事与JavaScript关键字高亮代码的实际应用相结合的例子。虽然故事本身并不直接关联到具体的IT技术细节,但从文档的部分内容可以看出,它涉及到了HTML与JavaScript的...

    javascript常用关键字

    注意`getYear()`在旧版浏览器中使用,现在推荐使用`getFullYear()`以避免世纪错误。 以上涵盖了文件中提到的大部分JavaScript知识点,涉及DOM操作、字符串处理、数据类型、流程控制、数学函数、日期对象等多个方面,...

    JavaScirpt搜索关键字提示

    在描述中提到的"中英文"下拉框提示,意味着我们需要处理两种语言的关键字。这涉及到字符串处理、字符编码以及多语言支持的问题。JavaScript原生并不支持多语言,但我们可以借助一些库,如i18next,来实现国际化。 ...

    跟我学习javascript的this关键字

    在JavaScript中,`this`关键字是一个经常被讨论的话题,因为它在不同的上下文中具有不同的含义。`this`关键字是动态绑定的,也称为运行期绑定,这意味着它会根据函数调用的方式和所在的上下文来改变其指向。这种动态...

    关键字飘红

    var keywords = ["关键字", "飘红"]; var content = "这里是包含关键字飘红的文本"; document.body.innerHTML = highlightKeywords(content, keywords); ``` 4. **正则表达式**:在JavaScript中,可以使用正则...

    JQuery 关键字高亮插件

    var keyword = "关键字"; // 选择需要高亮的元素,可以是任何包含文本的元素,如段落、标题等 var elementsToHighlight = $("p, h1, h2, h3"); // 使用插件高亮关键字 elementsToHighlight.highlight...

    一个简单的 JavaScript 脚本示例,它会在浏览器的控制台中输出 "Hello, World!"

    2. **变量声明**:使用`var`、`let`或`const`关键字声明变量。 3. **数据类型**:JavaScript中有多种数据类型,包括字符串(String)、数字(Number)、布尔值(Boolean)、数组(Array)、对象(Object)等。 4. **函数定义**...

    javascript网页关键字高亮代码

    通过上述分析,我们可以看到这个JavaScript关键字高亮代码实现了对网页文本中指定关键词的自动高亮效果,具有较好的实用性和扩展性。开发者可以根据具体需求调整关键词列表及其属性,进一步优化用户体验。此外,还应...

    详解JavaScript中this关键字的用法_.docx

    在JavaScript中,`this`关键字是一个非常重要的概念,它指的是当前执行上下文中的对象。`this`的值取决于函数的调用方式,而不是定义方式。下面我们将详细探讨在不同场景下`this`的用法。 1. **全局作用域中调用...

    精通JavaScript的this关键字_.docx

    JavaScript中的`this`关键字是一个非常重要的概念,它在编程中起着至关重要的作用,尤其是在对象方法的上下文中。`this`关键字的用法类似于自然语言中的代词,它用来引用当前执行上下文的对象,帮助开发者避免命名...

    JavaScript知识

    7. **定义变量**:在JavaScript中,使用`var`关键字定义变量,如: ```javascript var myVariable = "some value"; ``` 8. **字符串相加**:JavaScript中的字符串可以使用加号"+"进行拼接: ```javascript var...

    js 关键字变色v.rarjs 关键字变色v.rarjs 关键字变色v.rarjs 关键字变色v.rar

    标题中的"js 关键字变色v.rar"可能是指一个JavaScript项目,该项目实现了JavaScript关键字高亮显示的功能。JavaScript是一种广泛用于网页和网络应用的编程语言,它的关键字是语言的保留字,用于定义变量、函数、控制...

    JavaScript基础教程

    - 使用`var`关键字声明变量。 ```javascript var myVariable = "some value"; ``` ##### 3.2 字符串操作 - 字符串连接。 ```javascript var str1 = "Hello, "; var str2 = "World!"; var fullStr = str1 + ...

    牛人说JavaScript就那么回事

    定义变量是JavaScript编程的起点,使用`var`关键字: ```javascript var myVariable = "some value"; ``` 字符串可以通过加号`+`进行连接: ```javascript var myString = "String1" + "String2"; ``` 字符串搜索...

Global site tag (gtag.js) - Google Analytics