js面试题,关于变量提升,作用域,全局变量

/**********seperate line************/

var a = 10;
function test() {
  a = 100;
  console.log(a);
  console.log(this.a);
  var a;
  console.log(a);
}
test();
VM3854:4 100
VM3854:5 10
VM3854:7 100

/**********seperate line************/

var a = 100;
function test(){
  console.log(a);
  var a = 10;
  console.log(a);
}
test();
VM3896:3 undefined
VM3896:5 10

/**********seperate line************/

var a = 100;
function test(){
  console.log(a);
  a = 10; //去掉了var 就变成定义了全局变量了
  console.log(a);
}
test();
console.log(a);
VM2216:4 100
VM2216:6 10
VM2216:9 10

时间: 2024-10-16 04:10:00

js面试题,关于变量提升,作用域,全局变量的相关文章

原型模式故事链(4)--JS执行上下文、变量提升、函数声明

上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~哈哈哈 我们前端的代码一般就三个部分组成html + css +js,一般呢我们的JS又会放在最后执行. 执行上下文:所谓的执行上下文,就是JS代码执行的环境. Javascript中代码的运行环境分为以下三种: 全局上下文 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境.

JS预解析与变量提升

预解析 JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的.JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程 预解析过程: 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用. 先提升var,在提升function. JavaScript的执行过程 // 案例1 var a = 25; function abc() { alert(a)

JavaScript中的各种变量提升(Hoisting)

首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting). JS 存在变量提升(Hoisting),这个的设计其实是低劣的,它允许变量不声明就可以访问,或声明在后使用在前.新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑.但在 ES6 加入 let/const 后,变量Hoisting 就不存在了. 一. 变量未声明,直接使用 f

javascript变量提升详解

js变量提升 对于大多数js开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解.所以在此,我想来讲一讲. 先从一个简单的例子来入门: a = 2; var a; console.log(a); 你觉得以上的代码会输出什么?是输出undefined吗?如果是按照程序的自上而下执行的话,那么这一段代码确实是输出undefined.然而,javascript并不是严格的自上而下执行的语言. 这一段代码的输出结果是2,是不是感到很意外?为什么会这样呢?这个问题的关键就在于变

python - 函数的相互调用 及 变量的作用域

# -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_函数的相互调用及变量的作用域.py@ide: PyCharm Community Edition@time: 2018-11-10 10:04@blog: https://www.cnblogs.com/gotesting/ ''' # 1. 函数的相互调用# 从上往下按顺序执行 def print_msg(content): print('我想说:{}'.fo

【Python全栈-JavaScript】JavaScript变量的作用域

JavaScript变量的作用域全局变量 1.当在script中定义变量,在当前script中的定义前调用是undefined,没有定义该变量时调用报错.原因是在内存中开辟了该变量的存储位置,(当执行script时将所有定义的变量名先存到栈中) 当代码解释到该语句时才会将值存在栈中,没有执行之前调用该变量就是undefined,如果没有定义就不会在内存中开辟存储位置,因此就会报错. 2.如果在上一个script中调用下面的script的变量时,这时候不但没有值,而且没有开辟存储空间.因此,在上一

JS变量、作用域、 内存(含 预解析面试题)

一.变量 1. 变量 命名: 变量名以$.字母.下划线开头 驼峰命名法 变量名要有意义 2. 变量 声明 声明多个变量:var message, name, age; 重复声明无效,只看第一次声明[特殊:函数内形参 与 函数内的函数名(函数声明方式创建的函数) 重名,以函数名声明为准] <script> console.log(typeof a); function a() {} var a = 10; </script> // 输出:function <script>

js变量作用域--变量提升

1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 1 var x; //变量声明 2 var x=1; //变量声明并赋值 3 x = 1; // 定义全局变量并赋值 3.函数声明 function fn(){}; //函数声明并定义 var fn = function(){}; // 实际上是定义了一个局部变量fn和一个匿名函数,然后把这个匿名函数赋值给了fn

JS中作用域和变量提升(hoisting)的深入理解

作用域(Scoping) javascript作用域之所以迷惑,是因为它程序语法本身长的像C家族的语言.我对作用域的理解是只会对某个范围产生作用,而不会对外产生影响的封闭空间.在这样的一些空间里,外部不能访问内部变量,但内部可以访问外部变量. c语言的变量分为全局变量和局部变量,全局变量的作用范围是任何文件和函数访问(当然,对于非变量定义的其他c文件,需要使用extern关键字进行申明,使用static关键字也可以将作用范围限定在当前文件中),局部变量的作用范围就是从申明到最近的大括号涵盖的块级

一言难尽的js变量提升面试题

  全局作用域和局部作用域 全局作用域:整个JS执行环境 局部作用域:通过创建一个函数就开辟出了一个局部作用域 全局变量和 局部变量 全局变量:在全局作用域都可以访问的变量 局部变量:只能在当前局部作用域访问的 变量声明提升: 如果变量声明在函数里面,则将变量声明提升到函数的开头 如果变量声明是一个全局变量,则将变量声明提升到全局作用域的开头 变量运行(搜索)机制: 首先看,有没有局部作用域 如果有,查找是不是这个局部作用域定义的变量 如果不是,寻找上一级作用域,直到找到全局作用域 如果全局作用