1. JS的变量声明语句永远是在其作用域中最先执行的,不论其定义的位置在哪里;
  2. 函数体内部,局部变量的优先级比同名的全局变量高。
  3. Javas作用域分类
  4. 未使用var定义的变量不论定义在什么位置都是全局变量,全局变量实质属于window下的属性

1 JS的变量声明语句永远是在其作用域中最先执行的,不论其定义的位置在哪里

      var test= function()
     {
      console.log(s);//输出结果为undefined
      var s="you";
     };
     test();

原因就是在test函数作用域内,虽然var s="you"在console后面,但是由于变量的声明语句会是最先执行,因此等价于:

        var test= function()
      {
      var s;//相当于此处先执行了一步变量声明 但未赋值
console.log(s);//输出结果为undefined
      var s="you";
      };
      test();

console.log(s)结果为undefined;

2函数体内部,局部变量的优先级比同名的全局变量高

        var s="hello";
     var test= function()
     {
      var s="you";
      console.log(s);//输出结果为”you“
     };
     test();

局部变量优先级高,所以打印结果为"you"

3JS的作用域分类

Javascript作用域分类只有两种:全局作用域和方法作用域

函数又称作方法,因此方法作用域可以理解为函数内作用域,不同于C或者C++语言,JS没有块级作用域,for(var i=0;;i++)此处的i作用域就是for循环所在函数的作用域,而不是仅仅在for循环内部有效;

4未使用var定义的变量不论定义在什么位置都是全局变量

function test()//定义函数test
{
i=100;
}
test()//执行函数test
console.log(i);//输出100
console.log(window.i);//输出100

另外,需要注意的是 function XXX(){};仅仅是定义一个XXX()的函数,并没有执行函数代码,若此处没有test(),那么输出的i是undefined,也可以将

function XXX()
{
//code
};
XXX();
合并写成:
(function XXX()
{
//code
})():

形如:(function XXX(){})()是先定义函数XXX并且执行函数;此种写法的好处是能保证变量生存期,较少全局变量,易于变量回收

关于JavaScript 中的变量的更多相关文章

  1. JavaScript 中的变量命名方法

    三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...

  2. (转载)JavaScript中定义变量

    (转载)http://blog.163.com/xuxiaoqianhz@126/blog/static/165190577201061594421870/ JavaScript中定义变量有两种方式: ...

  3. 在javascript中关于变量与函数的提升

    在javascript中关于变量与函数的提升 一.简介 在javascript中声明变量与函数的执行步骤: 1.先预解析变量或函数声明代码,会把用var声明的变量或者函数声明的代码块进行提升操作 2. ...

  4. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  5. JavaScript学习系列2一JavaScript中的变量作用域

    在写这篇文章之前,再次提醒一下 JavaScript 是大小写敏感的语言 // 'test', 'Test', 'TeSt' , 'TEST' 是4个不同的变量名 JavaScript中的变量,最重要 ...

  6. 关于Javascript中声明变量、函数的笔记

    一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1, ...

  7. JavaScript 中对变量和函数声明提前的演示样例

    如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...

  8. 一篇文章带你了解JavaScript中的变量,作用域和内存问题

    1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为应用类型值. 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaS ...

  9. JavaScript中的变量在内存中的具体存储形式

    栈内存和堆内存 JavaScript中的变量分为基本类型和引用类型 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,通过按值访问 引用类型是保存在堆内存中的对象,值大小不固 ...

  10. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

随机推荐

  1. ORACLE 连接SQLSERVER 数据库备忘

    最近工作需要,要从SQL SERVER数据库中同步提取数据. 这里采用了  Oracle Gateway 来连接,折腾了半天,终于搞定,记录下已备下次使用. 基本资料网上都可以搜很多,官网配置说明在这 ...

  2. SetProcessAffinityMask的问题

    BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask );//M ...

  3. jQuery.attr() 函数详解

    一,jQuery.attr()  函数详解: http://www.365mini.com/page/jquery-attr.htm 二,jQuery函数attr()和prop()的区别: http: ...

  4. html中frameset简介

    1, 只 要 <FRAMESET> <FRAME> 两个标签,框架便是网页画面分成几个框窗,同时取得多个 URL. 2, 该框架只记录如何划分,不会显示任何资料.所以不必放入 ...

  5. SQLserver 备份和还原 失败

    错误一: 备份对于服务器“xxxxxx”失败. System.Data.SqlClient.SqlError: 无法使用备份文件 'C:\Program Files\Microsoft SQL Ser ...

  6. 面试复习(C++)之直接插入排序

    #include <iostream> using namespace std; void Insertsort(int *a,int len) { ;j<len;j++) { in ...

  7. pandas 数据检索

    使用pandas的一些方法: 条件检索 按index取值

  8. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  9. oracle 用户创建这个挺靠谱

    CREATE TEMPORARY TABLESPACE test_tempTEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf ...

  10. [转]OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...