JavaScript-变量的作用域面试题
块级作用域
- 在其他的语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外是不可见的
- JavaScript中没有块级作用域
//这里只有函数中定义的变量,才不能被外部访问
//这里的i和a变量,是可以在外面被访问的。
for(var i = 0;i<0;i++){
var a = 10; }
全局变量
- 定义在script或者不属于某个函数的变量
- 全局变量,可以在同一个文件中的两个Script代码使用
<script type="text/javascript">
var a=10;
</script>
<!--其他代码-->
<scripr type="text/javascript">
console.log(a);
//这里仍然可以输出a的值
<script>
局部变量
- 定义在函数内部的变量
其他
- 函数内部可以访问到该函数所属的外部作用域的变量(作用域链)
- 不使用var声明的变量是全局变量,不推荐使用。
注意:不使用var声明的变量,必须进行赋值,否则会提示变量不存在
function(){
a=1;
console.log(a);
}
//这里是违法的,因为a没赋值
function(){
console.log(a);
}
- 变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁
JavaScript中预编译的问题
JavaScript在接收到script代码的时候,会先进行预处理,改变代码的顺序
- 把代码的声明提前
- 把函数的定义提前
例如下面的代码
var num = 10;
fun();
function fun(){
condole.log(“兔子只吃胡萝卜”);
}
//JavaScript预处理后
var num;
function fun(){
condole.log(“兔子只吃胡萝卜”);
}
num = 10;
fun();
由此产生的面试题
1.输出的值是什么
var num = 10;
fun();
function fun (){
console.log(num);
var num = 20;
}
//首先将其预编译
var num;
num = 10;
function fun (){
var num;
console.log(num);
num = 20;
}
fun();
//此时输出为undefined
2. 输出是什么
var a = 18;
f1();
function f1(){
var b=9;
console.log(a);
console.log(b);
var a = ‘123’;
}
//预编译
var a;
a = 18;
function f1(){
var b;
var a;
b=9;
console.log(a);
console.log(b);
a = ‘123’;
}
f1();
//输出结果
undefined
9
3. 输出什么
//这里会牵扯到全部变量的定义,在函数中,如果没有用var定义的变量,是全局变量
f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
//预编译结果
var b;
var c;
function f1(){
var a;
a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
//输出结果
9
9
9
9
9
Uncaught ReferenceError: a is not defined//变量未定义
JavaScript-变量的作用域面试题的更多相关文章
- javascript变量的作用域
javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...
- javascript 函数初探 (三)--- javascript 变量的作用域
javascript 变量的作用域: 这是一个至关重要的问题.特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以 ...
- 深入理解 JavaScript 变量的作用域和作用域链
一个变量的作用域(scope)是程序源代码中定义这个变量的区域.简单的说,作用域就是变量与函数的可访问范围.全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义.局部变量是在函数体内 ...
- JavaScript变量和作用域
认识JavaScript中的变量 JavaScript中的变量有两种类型,一种是基本类型.一种是引用类型. 基本数据类型:Defined,Null,Boolean,Number,String.注意St ...
- JavaScript变量的作用域和函数的作用域的区别
变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
- JavaScript - 变量,作用域,内存
JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...
- 深入浅出 JavaScript 变量、作用域和内存 v 0.5
本文主要从原理入手分享变量和作用域的相关知识,最后结合本文所分享知识,再次深入了解下闭包的运行原理. 主要参考<JS高级程序设计> <JS权威指南> <高性能 JS> ...
- 【javascript 变量和作用域】
今天学习了javascript 的变量和作用域的基本知识,对于以前在开发中遇到的一些不懂的小问题也有了系统的认识,收获还是比较多的. [基本类型和引用类型] ECMAScript 变量可能包含两种不同 ...
- [从jQuery看JavaScript]-变量与作用域链
jQuery片段: var // Will speed up references to window, and allows munging its name. window = this, // ...
- [label][JavaScript][The Defined Guide of JavaScript] 变量的作用域
变量的作用域 一个变量的作用域(scope)是程序中定义这个变量的区域. 全局(global)变量的作用域(scope)是全局性的,即在JavaScript代码中,它处处都有定义. 而在函数之内 ...
随机推荐
- jquery 全选 全不选 事件绑定
<td width="82%" colspan="3"><input type="checkbox" id="a ...
- 抽象类 abstract 和 接口 interface 类的区别
在看一些框架的优秀改良时,都会设计一层base层,并且 base里面一般都是 abstract 类,然后 就找了为什么做的原因.发现: PHP5支持抽象类和抽象方法.抽象类不能直接被实例化,你必须先继 ...
- Mac系统安装Aircrack-ng破解附近wifi密码(1)
第一步, 安装macport, 安装Xcode 安装macport macport 是一个工具 管理软件包的一个工具, 我们也可以通过别的方式安装Aircrack-ng, 但是通过macport安装A ...
- 蓝桥网试题 java 基础练习 数列排序
---------------------------------------------------------------------------------------------------- ...
- jquery的deferred异步
推荐方法: var wait = function(dtd){ var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象 var tasks = function( ...
- Python - Python2与Python3合理共存Windows平台
Install Python2 and Python3 Python 2.7.13 - Windows x86-64 MSI installer Python 3.6.0 - Windows x86- ...
- oracle 11G RAC会话故障转移测试
目前接手的几个项目中,默认使用的oracle RAC数据库服务,均不能实现自动的会话转移,尤其是对于应用的长连接,一旦发生数据库故障,需要重启应用.实际11G具备会话迁移机制,为此做了如下配置测试,供 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(82)-Easyui Datagrid批量操作(编辑,删除,添加)
前言 有时候我们的后台系统表单比较复杂,做过进销存或者一些销售订单的都应该有过感觉 虽然Easyui Datagrid提供了行内编辑,但是不够灵活,但是我们稍微修改一下来达到批量编辑,批量删除,批量添 ...
- CentOS 6.5安装jdk1.8
1.源码包准备: 首先到官网下载jdk-8u66-linux-x64.tar.gz, http://www.oracle.com/technetwork/java/javase/downloads/j ...
- 不惧面试:HTTP协议(3) - Cookie
v博客前言 先交代下背景,写这个系列的原因是总结自己遇到的面试题以及可能遇到的题目,更重要的是,今年定的目标是掌握网络这一块的知识点,先是搞懂HTTP协议,然后是TCP/IP协议,再就是WCF如何运用 ...