js作用域之常见笔试题,运行结果题

笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题:

  1. 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到。

    function aaa() {
            var a = 10;
    }
    alert(a);//Error a is not defined  由于a是函数内部定义的局部变量,根据作用域关系,外层(全局环境)访问不到局部变量。因此会报错
    var a=10;
        function aaa(){
            alert(a);
        }
    
        function bbb(){
            var a=20;
            aaa();
        }
        bbb();//10  由于aaa()执行时aaa的作用域链中a=10;
  2. 当var不加时,会自动生成全局变量(不建议这样写,一般定义变量时建议使用var关键字)
function aaa() {
    var a = b = 10;//b未用var定义相当于全局变量,所以在函数外能够被访问到
}
aaa();
//alert(a);//会报错,a is not defined
alert(b);//10    相当于全局变量可以访问

 //此时上面代码相当于以下代码
 var b;
 function aaa() {
     b = 10;
     var a = b;
 }
 aaa();
 alert(a);//Error
 alert(b);//10

3.变量的查找是就近原则,找就近var定义的,就近找不到的话则在外层寻找。

var a=10;
    function aaa(){
        alert(a);
        var a=20;
    }
    aaa();//undefined   就近原则找到var定义的,预解析过程

4.当参数和局部变量重名时,优先级等同。

var a=10;
function aaa(a){
      alert(a);
       var a=20;
}
aaa(a);//10  由于参数和局部变量优先级等同,所以查找时找到局部变量10然后再是var定义的局部变量
var a=10;
    function aaa(a){
        var a=20;
        alert(a);

    }
    aaa(a);//20  局部变量将参数覆盖了,因此a值为局部变量的值
var a=10;
    function aaa(a){
        a+=3;//基本类型 /参数相当于局部变量,只是局部修改了a的值,而在全局访问时依然是全局的值
    }
    aaa(a);
    alert(a);//10 
var a=[1,2,3];var b=[1,2,3];
    function aaa(a,b){
        a.push(4);     b=[1,2,3,4];
    }
    aaa(a,b);
    alert(a);//[1,2,3,4]  引用类型是引用的地址,所以局部修改会影响全局的值    alert(b);//[1,2,3]
时间: 2024-10-10 21:53:52

js作用域之常见笔试题,运行结果题的相关文章

C#常见笔试题

1.产生20个不同的两位整数的随机数,并且对它们进行由小到大的排序.特别提醒:程序要自动生成20个不同的整数,而且这些整数必须是两位的,如:3不是两位整数,58是两位整数 List<int> numbers= new List<int>(); Random rnd = new Random(); int i = 0; while (i < 20) { int s = rnd.Next(10, 100); //注意s的值大于等于10小于100 if (!numbers.Cont

web前端常见笔试题总结

一.常见javascript笔试题 1.  var a = 1; delete a; console.log( typeof a); //number 显示生命的全局变量不能被删除 如果是 a = 1;   delete a; console.log(typeof a) //undefined; 隐式声明的全局变量可以删除 2.用一行代码实现字符串翻转 如: str="abcdefg",翻转后str="gfedcba"; var a = str.split('').

2018春招-今日头条笔试题-第三题(python)

题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出'1234567890',对于输入表达试获得对应的结果利用python内置函数eval()即可以实现.利用5个字符串来表达'1234567890',如下(为了好看,里面加了tab空格符) '66666 ....6 66666 66666 6...6 66666 66666 66666 66666 66666''6...6 ....6 ....6 ....6 6...6 6.... 6

从零开始的全栈工程师——js篇(作用域 this 原型笔试题练习)

作用域 // 1. fn() function fn () { console.log(12) } var as = function () { console.log(45) } // 2. var a = 12; function fn () { console.log(a) var a = 45; console.log(a) } fn() //3. var a = 12; function fn () { console.log(a) a = 45; console.log(a) } f

常见笔试题(三)

11.面向对象的三大特征,并作简单的介绍. 面向对象的三个基本特征是:封装.继承.多态. 封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的 数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.隐藏对象的属性和实现细节,仅对外公开接口,提高代 码安全性,封转程度越高,独立性越强,使用越方便. 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过 继承创建的新类称为"子类&q

java常见面试题——java常见笔试题

注:转载自http://www.cnblogs.com/yhason/archive/2012/05/08/2489932.html,版权归其所有! 5.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.为了提高效率节省空间,我们应该用StringBuffer类 6.int 和 Integer 有什么区别 Ja

常见笔试题总结

1.冒泡排序 1 int a[5] = {96,73,12,46,98}; 2 int i = 0,j = 0,t = 0; 3 4 for (j = 0;j < 4;j++) { 5 for (i = 0;i < 4 - j;i++) { 6 if (a[i] > a[i+1]) { 7 t = a[i]; 8 a[i] = a[i+1]; 9 a[i+1] = t; 10 } 11 } 12 } 2.操作系统中,进程可以分为(系统进程)和(用户进程)两类 3.ISO七层模型是什么?T

[转] C语言常见笔试题大全1

点击阅读原文 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL) [此处对原文有改动]我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的.3). 意识到这个表达式将使一个16位机的整型数溢

数据结构与算法常见笔试题

一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法.1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报.2.算法的基本要素:算法中对数据的运算和操作.算法的控制结构.3.算法设计的基本方法:列举法.归纳法.递推.递归.减半递推技术.回溯法.4.算法设计的要求:正确性.可读性.健壮性.效率与低存储量需求二.算法的复杂度1.算法的时间复杂度:指执行算法所需要的计算工作量2.算法的空间复杂度:执行这个算法所需要的内存空间三.数据结构的定义1.数据的逻辑结构:反映数