作用域

8道经典JavaScript面试题

て烟熏妆下的殇ゞ 提交于 2019-11-29 06:40:00
JavaScript是前端开发中非常重要的一门语言,浏览器是他主要运行的地方。JavaScript是一个非常有意思的语言,但是他有很多一些概念,大家经常都会忽略。比如说,原型,闭包,原型链,事件循环等等这些概念,很多JS开发人员都研究不多。 所以今天,就来和大家看看下面几个问题,大家可以先思考一下,尝试作答。 八道面试题 问题1:下面这段代码,浏览器控制台上会打印什么? 问题2:如果我们使用 let 或 const 代替 var,输出是否相同 问题3:“newArray”中有哪些元素? 问题4:如果我们在浏览器控制台中运行'foo'函数,是否会导致堆栈溢出错误? 问题5: 如果在控制台中运行以下函数,页面(选项卡) 是否会有响应 问题6: 我们能否以某种方式为下面的语句使用展开运算而不导致类型错误 问题7:运行以下代码片段时,控制台上会打印什么? 问题8:xGetter() 会打印什么值? 答案 前面的问题我们都举例出来了,接下来我们会从头到尾,一个个来分析我们这些问题的答案,给大家一些学习的思路 问题1: 使用var关键字声明的变量在JavaScript中会被提升,并在内存中开辟空间,由于没有赋值,无法定义数值类型,所以分配默认值undefined。var声明的变量,真正的数值初始化,是发生在你确定赋值的位置。同时,我们要知道,var声明的变量是函数作用域的

Python_变量作用域

回眸只為那壹抹淺笑 提交于 2019-11-29 06:27:20
1.变量作用域: def get_apple(name,*b): global totalCount totalCount=0 for num in b: print('.....................................') count=0 while(count<num): count+=1 totalCount+=1 print(name+'拿第'+str(count)+'个苹果') return totalCount totalCount1= get_apple('张三',5,10) #张三分两次拿苹果,第一次拿5个,第二次拿10个 print(totalCount1) print(totalCount) totalCount2= get_apple('李四',10,20,30) #李四分三次拿苹果,第一次拿了10个,第二次拿了20个,第三次拿了30个 print(totalCount2) print(totalCount) 注:如果在函数体内定义的变量不加global关键字,在函数体外是无法使用这个变量的,因为它是函数体内的局部变量,加了global关键字,函数体内的局部变量就可以在函数体外使用了 来源: https://www.cnblogs.com/myfy/p/11459852.html

JS day9 函数_返回值

一世执手 提交于 2019-11-29 06:04:35
1.返回值 希望能在外部获取到,函数调用的结果: 如果我们是要在外部获取到函数内运行结果, 可以通过return语句后面跟要返回的值 [注] :执行到return之后就结束 例如: function add (num1,num2){ //alert(num1+num2); 改为: return document.write(num1+num2); } add(2,6); function add(){ var sum=0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } return document.write(sum); //输出所有数据的和 } add(5,1,5,5,) 2.作用域 作用域:有效范围,每个函数的声明都会形成一个作用域. ①:全局作用域 : 声明的变量是全局变量 ②:局部作用域 :函数 声明的变量是局部变量,生命周期和生效的范围都是声明该变量的函数区域, 当函数调用完之后,就直接销毁. [注] :如果局部和全局变量名重复,采用就近原则,离哪个作用域近,就是哪个. 来源: https://blog.csdn.net/qq_34620296/article/details/100535678

java快速复习 一 基础语法

百般思念 提交于 2019-11-29 06:00:56
最近看很多算法书,比较不错的有不少都是java语言描述,所以用一天时间快速研究并整理java ,参考资料:java入门经典 Call this file "Example2.java". class Example2 { public static void main(String args[]) { int a; //声明变量 a = 100; //赋值 if(a = 100) print(a); // if(condition) statement; int x ; char y = 'x'; byte z = 22; int d = 3, e, f = 5; for(x = 0; x<10; x = x+1) // for(initialization; condition; iteration) statement; System.out.println("This is x: " + x); } }    java文件名和类名要相同,运行Java解释器实际上是指定你想要解释器运行的类的名字,它会自动搜索包含该名字且带有.class扩展名的文件。如果找到,它将运行含在该指定类中的代码。 所有的Java应用程序都通过调用main( )开始执行。 关键字public 是一个访问说明符(access specifier),它允许程序员控制类成员的可见性

web性能优化

情到浓时终转凉″ 提交于 2019-11-29 04:20:15
前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么 ?   1. 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。   2. 从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。   总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。   前端优化的途径有很多,按粒度大致可以分为两类,第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ;第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。另外,本着提高投入产出比的目的,后文提到的各种优化策略大致按照投入产出比从大到小的顺序排列。    一、页面级优化     1. 减少 HTTP请求数   这条策略基本上所有前端人都知道,而且也是最重要最有效的。都说要减少 HTTP请求,那请求多了到底会怎么样呢 ?首先,每个请求都是有成本的,既包含时间成本也包含资源成本。一个完整的请求都需要经过 DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个 “漫长” 而复杂的过程

为什么var可以重复声明

末鹿安然 提交于 2019-11-29 04:10:24
总结自:https://blog.csdn.net/DurianPudding/article/details/87953939 一言以蔽之: 编辑器会在作用域判断这是重名声明时,忽略var直接赋值 首先说明JS代码运行时三者的作用: 引擎负责整个代码的编译以及运行 编译器则负责词法分析、语法分析、代码生成等工作 作用域负责维护所有的标识符(变量)。 例: var a = 2; var a = 3; a = 4; alert(a); // 4 重复声明时:首先, 编译器对代码进行分析拆解 ,当遇见var a,则 询问作用域是否已存在叫a的变量 ,若不存在,则要求作用域声明一个新的变量a,若已存在,则 忽略var继续向下编译 。 赋值时:引擎遇见a=2时同样会询问在当前的作用域下是否有变量a。若存在,则将a赋值为2;若不存在,则顺着作用域链向上查找,若最终找到了变量a则将其赋值2,若没有找到,则招呼作用域声明一个变量a并赋值为2(这就是为什么第二段代码可以正确执行且a变量为全局变量的原因,当然,在严格模式下JS会直接抛出异常:a is not defined)。 来源: https://www.cnblogs.com/yanze/p/11450993.html

作用域和存储期

我的梦境 提交于 2019-11-29 04:03:24
  要创建大规模程序,必须首先理解作用域和存储期。 作用域和标识符的可见性   在如下代码所示的程序中对变量x的声明总共有三处。 /* 确认标识符的作用域 */ #include <stdio.h> int x = 75; /* A:文件作用域 */ void print_x(void) { printf("x = %d\n", x); } int main(void) { int i; int x = 999; /* B:块作用域 */ print_x();            //1 printf("x = %d\n", x);    //2 for (i = 0; i < 5; i++) { int x = i * 100; /* C:块作用域 */    //3 printf("x = %d\n", x);              //3 } printf("x = %d\n", x);          //4 return 0; }   首先我们可以看到A处声明的x。该变量的初始值为75,因为它是在函数外面声明定义的,所以这个x拥有 文件作用域 。   因此,函数print_x中的“x”就是上述的代码中出现的第一个x,程序执行后,屏幕上会输出           x = 75      显示的是第一个x的值   因为1处调用了函数print_x

ES6——let和const

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 03:31:14
  这里主要介绍let和const的使用方法   介绍两种新的声明对象的方法之前,先介绍ES6中新增的块级作用域 块级作用域   可以简单理解为,用一对花括号括起来的区域即为块级作用域,例如 for 、 if 、 switch 里的花括号, 可以嵌套   如果在 全局环境 下,默认也是一个 块级作用域   但 创建对象 时的一对花括号不算块级作用域       子级 块级作用域可以访问到 父级 块级作用域中的变量      特别注意,for语句中的()也是一个 块级作用域 ,而后面的{}则是()的 子级 的 块级作用域   也就是说,可以在for语句的执行语句块中,访问到for语句()里用let声明的变量,而出了for语句则无法访问该变量    let   上面也介绍了一些let的 使用方法 和 特色 ,即:   1.作用于块级作用域中   2.可以被嵌套于其内部的子级的块级作用域访问到   此外,let和var两种声明方式还有以下的区别: 同一作用域中不可重复声明   使用var可以在 同一块级作用域 中 多次声明同名的变量 ,且 再次声明不赋值 时,变量的值 不变   而使用let,只可以在 同一块级作用域 中声明一次同名变量,再次声明就会报错,在不同的块级作用域中不存在该问题   let声明后没有赋值,默认该变量值为undefined    没有变量提升(不会被预解析)  

成员变量和局部变量

无人久伴 提交于 2019-11-29 03:21:41
成员变量(全局变量) 局部变量 注意: -如果成员变量不是静态的,静态的方法访问不到。 -代码块修饰环节的声明变量,作用域在于整个代码块。 来源: CSDN 作者: 任贝贝 链接: https://blog.csdn.net/weixin_44059002/article/details/103243420

闭包函数

别说谁变了你拦得住时间么 提交于 2019-11-29 02:43:12
闭包函数 什么是闭包函数? 闭包函数是一种函数的使用方式,最常见的如下: function fn1(){ function fn(){ } return fn; } 这种函数的嵌套方式就是闭包函数,这种模式的好处是可以让内层函数访问到外层函数的变量,并且让函数整体不至于因为函数的执行完毕而被销毁。 例如: function fn1(){ var a =10; function fn(){ console.log(a); // 10 } return fn; } 再比如下面的代码,随着函数的每次执行,变量的值都会进行递增1,原因是因为外层函数的变量处于内层函数的作用域链当中,被内层函数所使用着,当js垃圾回收机制读取到这一情况后就不会进行垃圾回收。 例如: function fn1(){ var a = 1; function fn(){ a++; console.log(a); } return fn; } // 调用函数 var x = fn1(); x(); // 2 x();//3 闭包函数在js的开发当中是非常常见的写法,例如下面这种写法,功能是实现了对数组的一些常规操作的封装,也是属于对闭包函数的一种应用。 let Utils = (function(){ var list = []; return { add:function(item){ if(list