求女超人第三季百度云二季百度云资源

Js基础知识_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Js基础知识
上传于|0|0|文档简介
&&Js基础知识
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢JS基础知识知多少(二)--函数_美文阅读,精品文摘网
当前位置: &>&&>& >
JS基础知识知多少(二)--函数
通常来说,一个函数就是一个可以被外部代码调用(或函数本身递归调用)的“子程序”。和程序本身一样,一个函数的函数体是由一系列的语句组成的。
1.函数声明和函数表达式有什么区别?
syntax:函数声明:
function函数名称(参数:可选){函数体}函数表达式:functuion函数名称(可选)(参数:可选){函数体}如果声明了函数名称的话,当function 函数名称(){}是作为赋值表达式的一部分的话,那它就是函数表达式;如果function函数名称(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。区别在于:a.函数声明会在任何表达式被解析和求值之前先被解析和求值,即使声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值。示例:alert(fn());function fn() {return 'Hello world!';}b.函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:c.函数声明的syntax:function 函数名(){}函数表达式的syntax:var 变量名=function 函数名(){};
函数声明结尾没有分号,但是函数表达式以分号结尾。
2.什么是变量的声明前置?什么是函数的声明前置?变量的声明前置:JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果就是所有的变量的声明语句,都会被提升到代码的头部,也称为变量提升。函数的声明前置:函数声明过程在整个程序执行之前的预处理就完成了,所以只要在同一作用域,就可以访问到,即使在定义之前调用也可以。
3.arguments 是什么 ?arguments是一个类数组对象。代表传给一个function的参数列表。是函数内部的本地变量;arguments已经不再是函数的属性了。可以在函数内部通过使用arguments对象来获取函数的所有参数。这个对象为传递给函数的每个参数简历一个条目,条目的索引号从0开始。(MDN)
4.函数的重载怎样实现?JavaScript没有重载函数这个概念,但是可以通过arguments来模拟函数重载。实现代码示例:
function sum(){ var sum=0; for(var i=0;i & arguments.i++){ sum+=arguments[i]; }}sum(1,2);
5.立即执行函数表达式是什么?有什么作用 ?
立即执行函数表达式是函数定义完直接调用。syntax:
a.(function(){/code/}());b.(function(){/code/})();c.!function(){/code/}();
作用:a.js没有块级作用域,用来隔离作用域避免污染,或者截断作用域链,避免闭包造成引用常量无法释放;b.利用立即执行特性,返回需要的业务函数或对象,避免每次通过条件判断来处理。
6.什么是函数的作用域链 ?javascript中,变量的作用域有全局作用域和局部作用域两种。a.全局作用域:在代码任何地方都能访问到的对象拥有全局作用域b.局部作用域:一般只在固定的代码片段内可以访问到。c.函数作用域链:在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。
代码题:1.以下代码输出什么?
function getInfo(name, age, sex){ console.log('name:',name); console.log('age:', age); console.log('sex:', sex); console.log(arguments); arguments[0] = 'valley'; console.log('name', name); } getInfo('hunger', 28, '男'); getInfo('hunger', 28); getInfo('男');输出结果: getInfo('hunger', 28, '男'); name:hunger age:28 sex:男 ["hunger",28,"男"] name valley getInfo('hunger', 28); name:hunger age:28 sex:undefined ["hunger",28] name valley getInfo('男'); name:男 age:unfined sex:unfined ["男"] name valley
2.写一个函数,返回参数的平方和?
function sumOfSquares(){ var sum=0; for(var i=0;i & arguments.i++) { sum+=arguments[i]*arguments[i]; } console.log(sum);} sumOfSquares(2,3,4); // 29 sumOfSquares(1,3); // 10
3.如下代码的输出?为什么 ?
console.log(a); // undefined,变量提升 var a = 1; console.log(b);//报错,b is not defined
4.如下代码的输出?为什么 ?
sayName('world'); //函数sayName声明提前sayAge(10); //函数sayAge声明function sayName(name){ console.log('hello ', name); //输出:hello world }var sayAge = function(age){ //函数表达式 console.log(age); //报错,sayAge is not a function.函数表达式的声明不能提前};
5.如下代码输出?为什么?
function fn(){}var fn = 3;console.log(fn);
可以写成:
function fn(){}fn=3;console.log(fn);输出结果为:3,var fn变量提升,function fn(){}函数声明前置,第三行代码给fn赋值3,使其作为变量输出。6.如下代码输出?为什么function fn(fn2){ console.log(fn2); var fn2 = 3; console.log(fn2); console.log(fn); function fn2(){ console.log('fnnn2'); }}fn(10);解析:a.fn(10)调用函数function fn(fn2){}将10赋值给fn2;b.由于函数声明前置,console.log(fn2)输出function fn2(){ console.log('fnnn2');}c.var fn2=3给fn2重新赋值,console.log(fn2)输出3;d.console.log(fn)输出:function fn(fn2){ console.log(fn2); var fn2=3; console.log(fn2); console.log(fn); function fn2(){ console.log('fnnn2'); }}7.如下代码的输出?为什么?var fn = 1;function fn(fn){ console.log(fn);}console.log(fn(fn));输出结果:代码相当于:function fn(fn){ console.log(fn);}fn=1;console.log(fn(fn));报错:fn is not a function原因是:变量声明提前和函数声明前置,但是function fn(fn){}的声明在前面,之后给变量赋值,变量赋值会覆盖函数的声明,因此会报错。8.如下代码的输出?为什么? //作用域 console.log(j); console.log(i); for(var i=0; i&10; i++){
var j = 100;
console.log(i);
console.log(j);输出结果:console.log(i);//undefined,变量提升,因为没有赋值,所以输出是undefinedconsole.log(j);//undefined,变量提升,因为没有赋值,所以输出是undefinedfor(var i=0;i&10;i++){
var j=100;
}//定义全局变量i和j
console.log(i);//10
console.log(j);//100
9.如下代码的输出?为什么 ?
fn();var i = 10;var fn = 20;console.log(i);function fn(){ console.log(i); var i = 99; fn2(); console.log(i); function fn2(){ i = 100; }}输出结果:a.调用函数fn(){};b.运行函数fn(){};function fn(){ console.log(i);//变量提升,变量声明但没有赋值,输出undefined i = 99; fn2(); //调用函数fn2(),函数声明前置 console.log(i);//输出100 function fn2(){ i = 100; }}c.var i=10;给i赋值10,覆盖之前的100,console.log(i)输出10所以结果为:undefined1001010.如下代码的输出?为什么 ?var say = 0;(function say(n){ console.log(n); if(n&3)
console.log(say);输出结果:(function say(n){ console.log(n); if(n&3)
}( 10 ));为立即执行表达式;
输出结果为:
最后的console.log(say)输出全局变量say:0
参考文章:1.汤姆大叔的博客2.Ba to Basics: JavaScript Hoisting3.为什么要有js立即执行函数,存在的意义是什么?4.JavaScript作用域链
版权归王丽峰和饥人谷所有,若有转载,请注明来源
延伸阅读:
(责任编辑:美朵)
每日重点推荐
夏医生是自己多年老同事的儿子,国外学成归来做事业,老同事担心儿子诊所刚开,门厅罗雀伤了自尊,便偷偷塞钱给李梅,求她装病去“捧场”。
04-05 12-15 12-15
一周热点文章
在线阅读专题JS基础知识点整理
JS的组成:
ECMAScript
是什么:担当的是一个翻译的角色;是一个解释器;帮助计算机来读懂我们写的程序;实现+-*/,
定义变量;几乎没有兼容性问题;
文档对象模型;文档指的就是网页;把网页变成一个JS可以操作的对象;给了JS可以操作页面元素的能力;有一些兼容性问题;
BOM:浏览器对象模型;给了JS操作浏览器的能力;几乎不兼容;
变量类型:
检测变量类型:
类型:number, string, boolean, object, function,
undefined,
变量是一个杯子,它的类型是由它里面存放的东西决定的;
Undefined类型出现:1是真的没有定义,
2是虽然定义了,但没有赋值;
Object是什么:对象是一个复合类型,它是由一组基本类型组成的;如:div,它是一个对象,它有id,width等特性,它的id是string的,width是number的;
基本类型与引用类型:
变量类型转换:
parseInt();
从字符串中提取数字;
NaN; not a
和任何数计算
不与任何值相等,包括它自身;要比较需要使用方法isNaN();
显性类型转换:
parseInt()/
parseFloat();
的意义和检测:
检测:isNaN();
隐式类型转换:
,就是隐式转换,它会先把两边的东西转成一样的类型,然后再进行比较;
减法、乘法、除法
也会进行自发的隐式转换;只有加号不可以;
变量作用域与闭包:
作用域:就是变量能够起作用的范围;
局部变量:定义在一个函数里,只能在这个函数里用;
全局变量:
不定义在任何一个函数里,可以在任何地方去用;
闭包:是另一种作用域;子函数可以使用父函数的局部变量;&
命名规范:
匈牙利命名法:
有类型前缀;
首字母大写;
加减乘除、取模(求余数%);
&&/span&,
与, ||或,!取反;
运算符优先级:();
程序流程控制:
,switch,? :
while, for
break(终止整个循环), continue(终止本次循环,继续下次循环;只跳过当次;)
什么是真,什么是假:
非0数字,非空字符串包括空格,非空对象
数字0,空字符串,空对象null, undefined,
专门为JS诞生的一种数据格式;(JavaScript Object Notation)
对象标记语言;
和数组的关系;
JS的遍历:
函数返回值:
就是函数的执行结果;
可以没有return,
它会返回一个undefined;
10.函数传参:
存放所有的参数
封装CSS函数:利用argument长度判断,同时支持获取与设置;
如何获取非行间的样式:
currentStyle
获取计算后的样式
getComputedStyle
可以获取默认样式;
对于复合样式:如background无法获取;
数组的length属性可以赋值;可以用length=0清空数组;
添加与删除元素:
和 pop() &
尾部添、删
和 shift() &
头部添、删
sort():让sort排序数字,使用比较函数;
concat() :
连接两个数组,生成一个新数组;
join(分隔符):
用分隔符组合数组元素,生成一个字符串;
split(分隔符):
和join相反,把字符串切成数组;
万能方法splice():
参数:splice(开始位置,长度,新元素,新元素...);
作用:先从开始位置删除一定长度的元素,再在指定位置开始插入一些元素;
可以用于从中间插入、中间删除、以及任意位置替换;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 女超人第三季百度云 的文章

 

随机推荐