作用域与变量提升的面试题方法总结

前言:下面的方法能快速的解面试题,主要针对=>作用域与变量提升的面试题。并且没有this改变指向的情况

(有错或者不足的地方,随时修改补充)

1.没有参数的时候:看有没有var,或者函数申明(也就是说如果有变量提升,函数体内就变成私有变量了,函数体内修改了不会影响父级。)
有,子集是undefined,也不会找父级,下面修改了(简单和复合类型)都不会影响父级。
没有,子集找不到,会找到父级,下面修改了(简单和复合类型)都会影响父级。

2.有参数的时候:(有传参,函数体内就变成私有变量了,函数体内修改了 不会影响父级。除非用的同一个空间地址,也就是复合函数)
子集找不到,或者是undefined,(有没有var,或者函数申明)都会找参数,简单类型修改了不会影响父级,复合类型修改了会影响父级,除非重新赋址了。

原文地址:https://www.cnblogs.com/MrZhujl/p/9853562.html

时间: 2024-10-11 22:13:14

作用域与变量提升的面试题方法总结的相关文章

Javascript作用域和变量提升

下面的程序是什么结果? [javascript] view plain copy var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么下面这个呢? [javascript] view plain copy var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a); 结果是1. 吓你一跳

js 作用域,变量提升

先看下面一段代码: 1 var a = 0; 2 alert("1st alert : a = " + a); 3 function fun(){ 4 alert("2nd alert : a = " + a); 5 var a = 1; 6 setTimeout(function(){ 7 alert("3rd alert : a = " + a); 8 a = 2; 9 },1000); 10 a = 3; 11 setTimeout(fun

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

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

企业面试:作用域和函数提升的面试题

// 六道题 /** * 因为JS没有块级作用域,if里面的foo又是以var形式声明的,所以会被提升上去, * 被赋值为undefined,之后undefined代表false,所以会进入if语句块, * foo被赋值为10,所以下面会打印输出10 */ var foo = 1; function bar() { console.log(foo); // undefined if (!foo) { var foo = 10; } console.log(foo); // 10 } bar();

作用域、变量提升、函数提升、数据类型

一.作用域分类 (作用域范围内定义的变量,整个作用域都可以访问) 1. 全局作用域 使用var声明(或者不严格模式下没有声明)且在函数外定义的变量,其作用域范围是全局的,称其为全局作用域. 2. 函数作用域 使用var声明且在函数内部定义的变量,其作用域范围是整个函数,称其为函数作用域. 3. 块作用域(ES6) 使用let(或者const 常量)声明且在一个花括号(非函数)里面,其作用域范围就是这个花括号以内,称其为块作用域. 二.变量提升 (变量声明会提升至函数或者语句的最前面,位置还在其作

javas基础03——函数的作用域及变量提升

1.作用域 作用域,变量在函数内部作用的范围/区域.有函数的地方就有作用域. 2.局部作用域和全局作用域 function fn(){ var a = 1; } console.log(a); //报错:a is not defined 用var声明的变量,实际上是有作用域的 在函数内部定义的变量,该变量的作用域是整个函数体,在函数体外不可引用该变量,这是局部作用域 变量的生命周期: 1.永远存在----全局 程序没关,一直占用内存,少用全局 2.朝生暮死----局部 函数的大括号开头到函数的大

js作用域和变量提升

Function declarations and variable declarations are always moved (“hoisted”) invisibly to the top of their containing scope by the JavaScript interpreter. example1 : var foo = 1; function bar() { if (!foo) { var foo = 10; } console.log(foo); // 10 }

关于JS变量提升的一些坑

1 function log(str) { 2 // 本篇文章所有的打印都将调用此方法 3 console.log(str); 4 } 函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 变量声明.命名.提升 在JS中, 变量有4种基本方式进入作用域: 语言内置: 所有的作用域里都有this和arguments:(需要注意的是arguments在全局作用域是不可见的) 形式参数: 函数的形式参数会作为函数体作用域的一部分: 函数声明: 像这种形式: function foo() {

js 函数提升和变量提升

问题背景:在写一个非常简单的弹出交互时,定义了一个全局变量和一个方法,这个方法始终调不到这个变量,得到高人指点后,特意总结一下这个知识点: 一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. console.log(global); // undefined var global = 'global'; console.log(global); // global