JS作用域面试题总结
关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~
1.js作用域(全局变量,局部变量)内部可以访问外部,但外部的不能访问内部的
var a=;
function aaa(){
alert(a);
};
aaa(); //a 为外部变量即全局变量,所以可以直接访问到 结果为10
function aaa(){
var a=;
};
aaa();
alert(a); //a 为函数aaa()内部变量量即局部变量,所以无法访问到
var a=;
function aaa(){
alert(a);
};
function bbb(){
var a=;
aaa();
}
bbb(); //结果为10,因为aaa()函数不能访问到bbb()里面的局部变量,所以访问到的是a=10,这个全局变量。
2.不用var 定义变量时,会默认为是全局变量(不规范,不推荐)
function aaa(){
a=;
}
aaa();
alert(a); //结果为10;
//等价于:
var a;
function aaa(){
a=;
};
aaa();
alert(a);
//给未声明的变量赋值,此变量就会变成全局变量;var a=b=10; 可以解析成 b=10;var a=b; 也就是b为全局变量,a为局部变量,所以外部访问a访问不到,访问b结果为10;
所以为了避免出现这种隐患,我们在定义变量的时候把所有要定义的变量都加上var;
function aaa(){
var a=b=;
}
aaa();
alert(a);//结果为,无法访问到
alert(b);//结果为10;
3.变量的查找是就近原则去寻找,定义的var变量;第二点,变量的声明被提前到作用域顶部,赋值保留在原地,如下dome;
function aaa(){
alert(a);
var a=;
}
aaa(); //结果为:undefined
/**************/
var a=10;
function aaa(){
alert(a);
var a=20;
}
aaa(); //结果为:undefined
可以解析为是:
var a=10;
function aaa(){
var a; //声明提前了
alert(a);
a=20; //赋值扔留着原地
}
aaa();
4.当参数跟局部变量重名的时候,优先级是等同的
var a=;
function aaa(a){
alert(a);
var a=; //因为 a 是形参,优先级高于 var a; 所以 局部变量a的声明其实被忽略了。
}
aaa(a); //结果为:10
5.变量修改的时候另一个变量会跟着变化,但是当变量重新被定义时,则另一个不变化
var a=[,,];
var b=a;
b.push(4);
alert(a);//结果为[1,2,3,4] 当b改变的时候a也发生了改变
当b重新被赋值的时候 a不会改变.示例:
var a=[1,2,3];
var b=a;
b=[1,2,3,4]
alert(a)//结果为[1,2,3]
JS作用域面试题总结的更多相关文章
- js作用域面试题大全
什么是作用域:浏览器给js的生存环境叫作用域. 什么是变量提升: Js代码执行前,浏览器会给一个全局作用域window Window分两个模块一个是存储模块一个是执行模块 存储模块找到所有的var和f ...
- JS作用域,作用域,作用链详解
前言 通过本文,你大概明白作用域,作用域链是什么,毕竟这也算JS中的基本概念. 一.作用域(scope) 什么是作用域,你可以理解为你所声明变量的可用范围,我在某个范围内申明了一个变量,且这个变量 ...
- js作用域问题
<script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined ...
- js 作用域
js 作用域 js作用域链查找,子函数能取到父函数中定义的变量. 前段时间误写成如下形式: 这只是普通的函数调用,没有父子的关系,child()函数会在全局查找pi变量,没找到所以报错. 最近发现原来 ...
- 08.01 签到! js 作用域
js 作用域 : 1.js 没有块作用域 : for (var i = 0;i < 4; i++){ } alert(i) // i = 3 2.js 没有动态作用域: function f1( ...
- js作用域链
js作用域链 <script> var up = 555; function display(){ var innerVar = 2; function inner(){ var inne ...
- easyui datagrid load 封装 参数问题 js 作用域
var temp = { LoginAccount: $('#LoginAccount').val(), ShopName: $('#ShopName').val() }; function doSe ...
- js作用域零碎的知识点,不同的script块,虽然同是全局变量
如下代码,第一次弹出a,因为解析器里找到var a,赋予a变量undefined,弹出undefined <!DOCTYPE html> <html> <head> ...
- JS作用域和ASP(vbs)作用域比较
一.js作用域,先上图: 以上代码执行的效果是,依次弹出 undefined, undefined, a, a,为什么是这样的结果啦?因为JS的作用域为链式作用域. 作用域链: 用VAR声明一个变量时 ...
随机推荐
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- 加深一下BlockingQueue的认识
认识BlockingQueue BlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口. add:添加元素到队列里,添加成功返 ...
- Zabbix基本配置及监控主机
监控主机一版需要在被监控的主机上安装Zabbix Agent 监控主机 安装zabbix-agent 首先需要在被监控的主机上安装agent,可以下载预编译好的RPM进行安装,下载地址:http:// ...
- 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断
概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...
- js闭包for循环总是只执行最后一个值得解决方法
<style> li{ list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;curso ...
- Linux 入门之网络配置
查看网络状态 ifconfig 修改网络参数 实验环境centos6.5,其他系统自行百度 ls /etc/sysconfig/network-scripts 显示所有文件, vi /etc/sysc ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...
- 使用win10远程控制ubuntu16.04
使用win10远程控制ubuntu16.04,网上很多需要安装xfce桌面的.今天介绍一下,不需要安装其他桌面,使用Ubuntu16.04自带桌面,漂亮美观. Ubuntu16.04端: 1.打开终端 ...
- linux-centos6.5之ssh配置
查询\安装SSH服务 #rpm -qa |grep ssh 检查是否装了SSH包 #yum install openssh-server 没有的话,安装SSH服务 #chkconfig --list ...
- requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...