作用域

前端面试题及答案整理(一)(转)

做~自己de王妃 提交于 2019-12-03 04:50:43
各公司秋招很快就开始了,最近在准备面试的东西,干脆将发现的各类 面试题 整理一下共享出来,大部分面试题是没有标准答案的,我给出的答案也是仅供参考,如果有更好的解答欢迎在评论区留言。 Part1 手写代码 现场手写代码是现在面试中很常见的一类面试题,考察基础的数据结构与算法能力。 1 数组去重的实现 基本数组去重 Array.prototype.unique = function(){ var result = []; this.forEach(function(v){ if(result.indexOf(v) < 0){ result.push(v); } }); return result; } 利用hash表去重,这是一种空间换时间的方法 Array.prototype.unique = function(){ var result = [],hash = {}; this.forEach(function(v){ if(!hash[v]){ hash[v] = true; result.push(v); } }); return result; } 上面的方法存在一个bug,对于数组[1,2,'1','2',3],去重结果为[1,2,3],原因在于对象对属性索引时会进行强制类型转换,arr[‘1’]和arr[1]得到的都是arr[1]的值,因此需做一些改变: Array

Scala之隐式转换

筅森魡賤 提交于 2019-12-03 03:44:02
概述 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型。本文原文出处: http://blog.csdn.net/bluishglc/article/details/50866314 严禁任何形式的转载,否则将委托CSDN官方维护权益! 隐式转换有四种常见的使用场景: 将某一类型转换成预期类型 类型增强与扩展 模拟新的语法 类型类 语法 隐式转换有新旧两种定义方法,旧的定义方法指是的“implict def”形式,这是Scala 2.10版本之前的写法,在Scala 2.10版本之后,Scala推出了“隐式类”用来替换旧的隐式转换语法,因为“隐式类”是一种更加安全的方式,对被转换的类型来说,它的作用域更加清晰可控。 接下来我们通过实例来了解这两种隐式转换的写法。前文提到,隐式转换最为基本的使用场景是:将某一类型转换成预期类型,所以我们下面的例子就以最这种最简单的场景来演示,它们都实现了:将一个String类型的变量隐式转换为Int类型: “implict def”形式的隐式转换 package com.github.scala.myimplicit /** * A demo about scala implicit type conversion. * @author

jQuery在不造成全局冲突的情况下使用$别名

情到浓时终转凉″ 提交于 2019-12-03 02:58:29
问题 你希望使用快捷方式$来代替全局命名空间名称jQuery的名称,而又不用担心会造成全局冲突 解决方案 在这里的解决方案是创建一个匿名的自调用函数,将jQuery对象传递给这个函数,然后将$字符当做指向jQuery对象的一个参数。 例如:所有的jQuery代码可以封装在如下的自调用函数中: <!-- lang: js --> (function($){//使用$参数创建私有作用域的函数 //私有作用域和$的使用无须担心抽鞥图 })(jQuery);//调用匿名函数并将其传递给jQuery对象 讨论 实际上,这里做的就是将jQuery的全局对象引用传递给一个创建私有作用域的函数。如果没有这么做,而是直接在全局作用域内使用简写的$别名,就必须假定包含在HTML文档中的其他脚本(或者未来包含的脚本)都没有使用$字符,这是有一定风险的。当你能够创建私有作用域,何必去冒险呢? 这样做的另一个好处是包含在匿名的自调用函数中的代码将会运行在自己的私有作用域中。可以确信,在该函数中放置的任何内容都绝不会和全局作用域中编写的其他JavaScript代码有冲突,为什么要冒着冲突的风险呢?你要做的仅仅是创建一个私有作用域罢了! 有关匿名函数和私有作用域,请看 私有作用域的介绍 来源: oschina 链接: https://my.oschina.net/u/1431510/blog/210201

闭包的作用域问题

流过昼夜 提交于 2019-12-03 01:28:45
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> //测试1 var obj = {name:'haha',data:{value:1}}; function outer(){ var objback = obj.data; function inner(){ objback = {} } return inner; } var f1 = outer(); f1(); console.log("测试1",obj) //{name:'haha',data:{value:1}}; 未发生改变 //测试2 var obj2 = {name:'haha',data:{value:1}}; function outer2(){ var objback = obj2; function inner(){ objback.data = null console.log("测试21",JSON.stringify(obj2)); //{name:'haha',data:null} objback.name = "asdf"; console.log("测试22",JSON.stringify(obj2)); //{name:'asdf',data:null}

15、js 原生基础总结

匿名 (未验证) 提交于 2019-12-03 00:40:02
Day1 ??==基于对象==和==事件驱动==的客户端脚本语言 1995,NetScape(网景公司),布兰登(Brendan Eich),liveScript ECMA-262 ECMA 、BOM 、DOM 三种,与引入CSS相似, 内联样式,外部样式,内部样式。 alert(); 以警告框的方式输出,中断后面代码的执行 document.write();输出在页面中,它是影响页面布局 console.log();在控制台输出,不影响用户体验,是程序常用的排序工具,它是输出对象的详细信息 如果是纯JS代码中换行 \n (alert(); ) 如果是在页面中换行 <br> (document.write()) 基本数据类型: Number/String/Boolean/Null/Undefined/Symbol 复合数据类型:Object 1.包含字母/数字/下划线/$/中文 2.不能以数字开头 3.不能是关键字/保留字 4.语义化 5.驼峰命名 1>大驼峰: ZhongHuaRenMingGongHeGuo 常用于类(构造函数名) 2>小驼峰: zhongHuaRenMingGongHeGuo 6.匈牙利命名法: 整数(int) iNum 小数(float) fNum 布尔(boolean) boo 数组(array) arr 函数(function) fn 正则 re

深入理解Spring ―― Bean的更新

匿名 (未验证) 提交于 2019-12-03 00:39:02
在开发过程中,有没有遇到这样的问题,需要拿到的Bean 每次都是新创建的 那么如何配置Bean 来满足该需求呢? 在Spring Bean 的作用域有几种: 作用域 描述 singleton 该作用域将 bean 的定义的限制在每一个 Spring IoC 容器中的一个单一实例(默认)。 prototype 该作用域将单一 bean 的定义限制在任意数量的对象实例。 request 该作用域将 bean 的定义限制为 HTTP 请求。只在 web-aware Spring ApplicationContext 的上下文中有效。 session 该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。 global-session 该作用域将 bean 的定义限制为全局 HTTP 会话。只在 web-aware Spring ApplicationContext 的上下文中有效。 PS:该图参考于 http://wiki.jikexueyuan.com/project/spring/bean-scopes.html 那么我们可以通过prototype 来实现我们要达到的效果 @Configuration public class TestBeanConfig { @Bean ( "testBean

ES6常用的知识点

匿名 (未验证) 提交于 2019-12-03 00:38:01
1、const 1)const定义的是常量,不可修改 2)const的作用域只在当前代码块内有效,如果在代码块之外调用输出undefined 3)声明的作用域不会被提升 4)常量不能重复声明 5)申明的常量必须赋值 2、箭头函数 function a(){ ()=>{ } } 当()=>{}中的()只有一个参数的时候,可以省略,当{}中的表达式直接作为范围值的时候,也可以省略 eg: let a = [ 1 , 2 , 3 , 4 , 5 ]; let add = a . map ( function ( b ){ return b + 1 }); 等价于 let a = [1,2,3,4,5]; let add = a.map(b=>b+1); 3、扩展运算符... 4、var 和 let的区别 1)let作用域只局限于当前代码块 2)使用let声明的变量作用域不会被提升 var声明: let声明: 3)let在相同的作用域下不能声明相同的变量 4)for循环体现let的父子作用域 定义5个按钮,实现当点击哪一个按钮的时候输出点击第几个按钮 01.以下方案无论点击哪一个按钮都会输出“点击了第5个按钮”,因为for循环是同步事件,事件触发是异步事件。 02.闭包的方式解决 03.let方式 1和2分别为两个作用域 04 . 没有方框里的内容时,输出的是0,1,2,3,4,5

什么是执行环境与作用域?

匿名 (未验证) 提交于 2019-12-03 00:21:02
执行环境(execution content)为了简便有时称其为“环境”。 执行环境定义了变量或者函数并有权访问其他的数据,决定了它们各自的行为。每个执行环境都有一个与之相关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中,解析器会在处理数据是在后台使用它。 全局执行环境是最外围的一个执行环境,根据ECMAScript实现所在的宿主环境不同,表示执行环境的对象也不一样。在WEB浏览器中全局执行环境被认为是window对象。因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。(全局执行环境直到应用程序退相互――例如关闭网页或者关闭浏览器是才会被销毁) 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入到一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。 当代码在一个环境中执行时,会创建变量对象的一个作用域链。 作用域链的用途是,保证对执行环境有权访问的所有变量和函数的有序访问。 作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象。活动对象在最开始时只包含一个变量。即arguments对象,此对象在全局环境中是不存在的

转载的js块级作用域相关文章

匿名 (未验证) 提交于 2019-12-03 00:21:02
转载自 http://www.phpvar.com/archives/3033.html js没有块级作用域,简单的例子: for(var i=0,i<10;i++){ alert(i); } alert(i); for循环后的i,在其它语言像c、java中,会在for结束后被销毁,但js在后续的操作中仍然能访问到i值,即for循环后的alert(i);会弹出数值i=10; js模仿块级作用域: (function(){ for(var i=0,i<10;i++){ alert(i); } })(); alert(i); js私有作用域(模仿块级作用域) 语法格式: (function(){ //这里是块级作用域 // 作用:限制向全局作用域中添加过多的变量和函数,即避免内部临时变量影响全局空间 })(); 将函数声明包含在一对()中,表示该函数实际是一个函数表达式(注:函数表达式后面可以跟(),要将函数声明转换成函数表达式,只需用()将函数声明包括起来即可),而紧随其后的另一对()会立即调用这个函数。 因此(function(){})(); 可理解成定义了一个函数表达式后,并 立即调用 该函数表达式,即等同于定义了: var someFunction=function(){}() 或 var someFunction=function(){} ; someFunction() ;

ES6箭头函数 - 使用说明与注意事项

匿名 (未验证) 提交于 2019-12-03 00:18:01
箭头函数,要注意一点其本身不指定作用域; Test() { let that = this; this.data.name = "安"; let inner = { func: (peram) = >{ this.name = "旭" }, func1: function() { this.name = "安旭" } } inner.func(); inner.func1(); console.log("~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~", this.name) // 输出: ~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~ 旭 } 1、为什么会输出 ‘ 旭 ’ 因为 ES6 中的箭头函数,不指定作用域,他的作用域就是上一级(一级一级的往上找)的作用域; 而function(){}, 创建自己的作用域; 2、建议使用赋值 that 吗? 因人而异,一种情况就是,在 () => {} 存在过多时,如果不使用赋值 that,担心会迷; 3、是否要用箭头函数全部替代 function函数? 在需要闭合环境下,不适用箭头函数,而是使用 function 函数; 多交流。。。 文章来源: ES6箭头函数 - 使用说明与注意事项