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代码中,它处处都有定义. 而在函数之内 ...
随机推荐
- S2SH框架整合(注解)Struts2+Spring+Hibernate+MySql
整合简介 Struts2+Spring4+hibernate4整合,Maven管理jar包,Eclipse工具.注解方式 架构截图 1.Spring整合Hibernate 1.1.创建Hibern ...
- Swiper --移动端触摸滑动插件
Swiper使用方法 1.首先加载插件,需要用到的文件有swiper.min.js和swiper.min.css文件. <!DOCTYPE html> <html> <h ...
- php下安装动态扩展库的相关事项
php下安装动态扩展库的相关事项 我下载的Apache版本为2.4,PHP版本为7.0. 将Apache与PHP集成配置好后(PHP安装目录为:G:\computer\web\php7,apache安 ...
- Linux驱动技术(一) _内存申请
先上基础,下图是Linux的内存映射模型,其中体现了Linux内存映射的几个特点: 每一个进程都有自己的进程空间,进程空间的0-3G是用户空间,3G-4G是内核空间 每个进程的用户空间不在同一个物理内 ...
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...
- lable 以及cell的高度自适应
1.先cell自适应 可以先拿到 这个lable里文字的高度 //lable自适应的高度 -(CGFloat)heightWithString:(NSString *)aString { CGRect ...
- java socket tcp(服务器循环检测)
刚才看了下以前写了的代码,tcp通信,发现太简单了,直接又摘抄了一个,运行 博客:http://blog.csdn.net/zhy_cheng/article/details/7819659 优点是服 ...
- Spring 中使用Quartz实现任务调度
前言:Spring中使用Quartz 有两种方式,一种是继承特定的基类:org.springframework.scheduling.quartz.QuartzJobBean,另一种则不需要,(推荐使 ...
- CREELINKS平台_处理器CeCcp资源使用说明(CeCcp的配置与使用)
0x00 CREELINKS平台简介 CREELINKS(创e联)是由大信科技有限公司研发,集合软硬件.操作系统.数据云储存.开发工具于一体,用于物联网产品的设计.研发与生产的平台. 平 ...
- 用C++编一程序,先输出一行sun mon tue wed thu fri fri,接着使用右对齐打印出日期,像日历那样
用C++编一程序,先输出一行sun mon tue wed thu fri fri,接着使用右对齐打印出日期,像日历那样 先输出一行sun mon tue wed thu fri fri,再提醒用户输 ...