JavaScript高级题
1.Java和JavaScript是什么关系?
就像雷锋和雷霆塔的关系一样。
一般认为,当时 Netscape 之所以将 LiveScript 命名为 JavaScript,是因为 Java 是当时最流行的编程语言,带有 “Java” 的名字有助于这门新生语言的传播。
2.ES6听说过吗?和JavaScript是什么关系?ES2015听说过吗?都是什么关系?
CMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现(另外的ECMAScript方言还有Jscript和ActionScript)。日常场合,这两个词是可以互换的。
ES6既是一个历史名词,也是一个泛指,含义是5.1版以后的JavaScript的下一代标准
3.如何把变量转成数字?转成布尔?转成字符串?
转数字:
parseInt: 如果前几个字符可以是数字可以转成数字
Number:将整体转成数字( 例:123abc 不能转)
转字符串:
value.toString()
“”+value
String(value)
4.var 和 let 是干什么用的?什么区别?
var:
可以定义 局部变量和 全局变量
如果在函数中定义变量时没有写 var 或者 let 那么变量将会变成全局变量
let:
可以定义 块级变量 、局部变量、和全局变量
let 可以定义块级变量
区别
- let : 变量只能声明一次
- var : 变量可以多次声明
5.在一个函数中,如果定义变量时没有添加 var 会出现什么情况?
有的话应用于作用域,没有的话默认为全局变量
6.什么是内存泄漏?
7.什么是块级作用域?
JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。
块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。
8.什么是运算符短路?有什么用?
我们可以使用 &&
和 ||
实现短路操作。
&& : 连接多个语句,当语句1为真是执行语句2.
||:连接多个语句,当语句1为假时执行语句2.
可以用短路运算符来实现一些简写,比如,有时我们获取到一个变量,不知道它的值是什么,但我们希望无论如何它都是一个数字,至少是个0,我们就可以写:
// 如果 a 是假就得到0
var a = a || 0
// 如果 o 存在就调用 o.name
o && o.name()
9.说出JS中你用过的数据类型?
10.常用的循环
11.arguments的用途
在函数中可以使用 arguments
获取函数在调用时的参数数组。
function abc() {
console.log( arguments.length ) // 2 , 获取参数的数量
console.log( arguments[0] ) // tom ,第一个参数值
console.log( arguments[1] ) // jack ,第二个参数值
}
abc('tom','jack')
12.什么是匿名函数?应用场景?
匿名函数可以用来隔绝一段作用域。
有时我们需要在一个现有的项目中添加新的代码,这时当我们添加变量、函数时就有可能出现和原来系统中变量名、函数名冲突的情况,为了避免我们的代码和原代码中出现命名冲突的情况,我们就可以把我们的代码放到一个匿名函数中,然后调用这个匿名函数,这样我们所写的代码都只在这个匿名函数内生效,就不会影响其它代码了。
有两种写法,来调用匿名函数得到一段独立的作用域:
(function(){
// 这里的代码不影响外面的作用域
})()
!function(){
// 这里的代码不影响外面的作用域
}()