1. 关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~

1.js作用域(全局变量,局部变量)内部可以访问外部,但外部的不能访问内部的 

  1. var a=;
  2. function aaa(){
  3. alert(a);
  4. };
  5. aaa(); //a 为外部变量即全局变量,所以可以直接访问到 结果为10
  1. function aaa(){
  2. var a=;
  3. };
  4. aaa();
  5. alert(a); //a 为函数aaa()内部变量量即局部变量,所以无法访问到
  1. var a=;
  2. function aaa(){
  3. alert(a);
  4. };
  5. function bbb(){
  6. var a=;
  7. aaa();
  8. }
  9. bbb(); //结果为10,因为aaa()函数不能访问到bbb()里面的局部变量,所以访问到的是a=10,这个全局变量。

 2.不用var 定义变量时,会默认为是全局变量(不规范,不推荐)

  1. function aaa(){
  2. a=;
  3. }
  4. aaa();
  5. alert(a); //结果为10;
  6. //等价于:
  7. var a;
  8. function aaa(){
  9. a=;
  10. };
  11. aaa();
  12. alert(a);

//给未声明的变量赋值,此变量就会变成全局变量;var a=b=10; 可以解析成 b=10;var a=b; 也就是b为全局变量,a为局部变量,所以外部访问a访问不到,访问b结果为10;

所以为了避免出现这种隐患,我们在定义变量的时候把所有要定义的变量都加上var;

  1. function aaa(){
  2. var a=b=;
  3. }
    aaa();
    alert(a);//结果为,无法访问到
    alert(b);//结果为10;

3.变量的查找是就近原则去寻找,定义的var变量;第二点,变量的声明被提前到作用域顶部,赋值保留在原地,如下dome;

  1. function aaa(){
  2. alert(a);
  3. var a=;
  4. }
  5. aaa(); //结果为:undefined
    /**************/
  1. var a=10;
    function aaa(){
  2. alert(a);
  3. var a=20;
  4. }
  5. aaa(); //结果为:undefined
    可以解析为是:
    var a=10;
    function aaa(){
    var a; //声明提前了
    alert(a);
    a=20; //赋值扔留着原地
    }
    aaa();
  1. 4.当参数跟局部变量重名的时候,优先级是等同的
  1. var a=;
  2. function aaa(a){
  3. alert(a);
  4. var a=; //因为 a 是形参,优先级高于 var a; 所以 局部变量a的声明其实被忽略了。
  5. }
  6. aaa(a); //结果为:10
  1. 5.变量修改的时候另一个变量会跟着变化,但是当变量重新被定义时,则另一个不变化
  1. var a=[,,];
  2. var b=a;
  3. b.push(4);
  4. alert(a);//结果为[1,2,3,4] 当b改变的时候a也发生了改变
  1. b重新被赋值的时候 a不会改变.示例:
  1. var a=[1,2,3];
  2. var b=a;
    b=[1,2,3,4]
    alert(a)//结果为[1,2,3]
  1.  

JS作用域面试题总结的更多相关文章

  1. js作用域面试题大全

    什么是作用域:浏览器给js的生存环境叫作用域. 什么是变量提升: Js代码执行前,浏览器会给一个全局作用域window Window分两个模块一个是存储模块一个是执行模块 存储模块找到所有的var和f ...

  2. JS作用域,作用域,作用链详解

    前言   通过本文,你大概明白作用域,作用域链是什么,毕竟这也算JS中的基本概念. 一.作用域(scope) 什么是作用域,你可以理解为你所声明变量的可用范围,我在某个范围内申明了一个变量,且这个变量 ...

  3. js作用域问题

    <script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined ...

  4. js 作用域

    js 作用域 js作用域链查找,子函数能取到父函数中定义的变量. 前段时间误写成如下形式: 这只是普通的函数调用,没有父子的关系,child()函数会在全局查找pi变量,没找到所以报错. 最近发现原来 ...

  5. 08.01 签到! js 作用域

    js 作用域 : 1.js 没有块作用域 : for (var i = 0;i < 4; i++){ } alert(i) // i = 3 2.js 没有动态作用域: function f1( ...

  6. js作用域链

    js作用域链 <script> var up = 555; function display(){ var innerVar = 2; function inner(){ var inne ...

  7. easyui datagrid load 封装 参数问题 js 作用域

    var temp = { LoginAccount: $('#LoginAccount').val(), ShopName: $('#ShopName').val() }; function doSe ...

  8. js作用域零碎的知识点,不同的script块,虽然同是全局变量

    如下代码,第一次弹出a,因为解析器里找到var a,赋予a变量undefined,弹出undefined <!DOCTYPE html> <html> <head> ...

  9. JS作用域和ASP(vbs)作用域比较

    一.js作用域,先上图: 以上代码执行的效果是,依次弹出 undefined, undefined, a, a,为什么是这样的结果啦?因为JS的作用域为链式作用域. 作用域链: 用VAR声明一个变量时 ...

随机推荐

  1. 恢复SQL Server被误删除的数据

    恢复SQL Server被误删除的数据 <恢复SQL Server被误删除的数据(再扩展)> 地址:http://www.cnblogs.com/lyhabc/p/4620764.html ...

  2. Hawk 7. 常见问题

    本页面您可以通过关键字搜索来获取信息. 理性使用爬虫 爬虫是一种灰色的应用,虽然作为Hawk的设计者,但我依然不得不这么说. 各大网站都在收集和整理数据上花费了大量的精力,因此抓取的数据应当仅仅作为科 ...

  3. spring remoting源码分析--Hessian分析

    1. Caucho 1.1 概况 spring-remoting代码的情况如下: 本节近分析caucho模块. 1.2 分类 其中以hession为例,Hessian远程服务调用过程: Hessian ...

  4. C#如何在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...

  5. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  6. 用WebRequest +HtmlAgilityPack 从外网抓取数据到本地

    相信大家对于WebRequest 并不陌生,我们在C#中发请求的方式,就是创建一个WebRequest .那么如果我们想发一个请求到外网,比如国内上不了的一些网站,那么该怎么做呢? 其实WebRequ ...

  7. Unity3D 5.3 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  8. PHP中PDO事务的使用方法

    事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行. 在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操 ...

  9. 代码的坏味道(15)——冗余类(Lazy Class)

    坏味道--冗余类(Lazy Class) 特征 理解和维护类总是费时费力的.如果一个类不值得你花费精力,它就应该被删除. 问题原因 也许一个类的初始设计是一个功能完全的类,然而随着代码的变迁,变得没什 ...

  10. c++ pair 使用

    1. 包含头文件: #include <utility> 2. pair 的操作: pair<T1,T2> p; pair<T1,T2> p(v1,v2); pai ...