块级作用域

-      在其他的语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外是不可见的

-      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-变量的作用域面试题的更多相关文章

  1. javascript变量的作用域

    javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象  讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...

  2. javascript 函数初探 (三)--- javascript 变量的作用域

    javascript 变量的作用域: 这是一个至关重要的问题.特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以 ...

  3. 深入理解 JavaScript 变量的作用域和作用域链

    一个变量的作用域(scope)是程序源代码中定义这个变量的区域.简单的说,作用域就是变量与函数的可访问范围.全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义.局部变量是在函数体内 ...

  4. JavaScript变量和作用域

    认识JavaScript中的变量 JavaScript中的变量有两种类型,一种是基本类型.一种是引用类型. 基本数据类型:Defined,Null,Boolean,Number,String.注意St ...

  5. JavaScript变量的作用域和函数的作用域的区别

    变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...

  6. JavaScript - 变量,作用域,内存

    JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...

  7. 深入浅出 JavaScript 变量、作用域和内存 v 0.5

    本文主要从原理入手分享变量和作用域的相关知识,最后结合本文所分享知识,再次深入了解下闭包的运行原理. 主要参考<JS高级程序设计> <JS权威指南> <高性能 JS> ...

  8. 【javascript 变量和作用域】

    今天学习了javascript 的变量和作用域的基本知识,对于以前在开发中遇到的一些不懂的小问题也有了系统的认识,收获还是比较多的. [基本类型和引用类型] ECMAScript 变量可能包含两种不同 ...

  9. [从jQuery看JavaScript]-变量与作用域链

    jQuery片段: var // Will speed up references to window, and allows munging its name. window = this, //  ...

  10. [label][JavaScript][The Defined Guide of JavaScript] 变量的作用域

    变量的作用域 一个变量的作用域(scope)是程序中定义这个变量的区域. 全局(global)变量的作用域(scope)是全局性的,即在JavaScript代码中,它处处都有定义.    而在函数之内 ...

随机推荐

  1. ML2 配置 OVS VxLAN - 每天5分钟玩转 OpenStack(146)

    今天我们开始学习 OVS 如何实现 Neutron VxLAN,关于 VxLAN 的概念以及 Linux Bridge 实现,大家可以参考前面相关章节. Open vSwitch 支持 VXLAN 和 ...

  2. 史上最牛逼的文件bom头清除代码,万能检测清除php,js等等

    做php开发,经常部分uft8的php文件因BOM头不同导致各种错误和错位.网上搜到的大部分所谓的去处bom工具都是2货,没有能用的.下面的一段代码,请复制到一个php文件里,然后上传到你的网站根目录 ...

  3. Web Worker无阻塞UI的牛逼技术,html5,可惜无法敢于UI

    众所周知,JavaScript是单线程的,JS和UI更新共享同一个进程的部分原因是它们之间互访频繁,但由于共享同一个进程也就会造成js代码在运行的时候用户点击界面元素而没有任何响应这样的情况,这么糟糕 ...

  4. [Android ADB] An auto-input method for Android and Windows

    The Valentine's Day is coming. Here is an auto-input method and you may use it to send multiple word ...

  5. 剖析Asp.Net路由系统

    对于Asp.Net Web Forms应用来说,请求的Url都是对应一个具体的物理文件(http://xxx.com/default.aspx).这样的Url与具体物理文件紧密绑定在一起,带来了诸多方 ...

  6. webForm系列 前端框架快速引用

    Html的确定就是不能重用,MVC可以在_Layout.cshtml中将每个页面都需要的js和css文件(如jq,bootstrap等)都引用进去,webform就麻烦一点. webForm需要给所以 ...

  7. android 下Protobuff框架性能测试结果

    android 下Protobuff常用的框架有三个: protobuff自身,  square出的wire , protostuff 由于protobuff会为每个属性生成大量不常用的方法,当程序比 ...

  8. xcode8 更新cocoapods

    一.升级ruby环境,由于目前淘宝Ruby镜像升级有问题,所以使用了 http://rubygems-china.oss.aliyuncs.com 二.需要操作的步骤: 1.检查你的ruby源,终端输 ...

  9. python2.7读汉字的时候出现乱码,如何解决

    我使用的是window系统,安装Anaconda,所以用的是. 1.数据形式 2.读进来乱码 3.解决办法 3.1方法1 import pandas as pd #pd.read_csv('c:/us ...

  10. 一张图看懂 JS 的事件机制

    一.为什么 JavaScript 单线程 假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准? 为了避免复杂性, JS ...