一、函数

  1.有名函数和匿名函数

    函数:是由事件驱动的或者当它被调用时执行的可重复使用的代码块,包裹在花括号中,前面使用了关键词 function:

    有名函数:有名字的函数
    函数名加括号执行 / 充当事件函数执行

    function fn() {

      alert(1);

    }
    fn();

    匿名函数:没有名字的函数
    匿名函数不能单独出现 一般充当事件函数,匿名函数的作用是避免全局变量的污染以及函数名的冲突   

    匿名函数主要三种写法:

    1)使用()将函数及函数后的括号包裹

      (function(){}());

      注:此方式把()换成[]也可以

    2)使用()值包裹函数值
      (function(){})(); 

      注:此方式把()换成[]不可以

    3)可以使用多种运算符开头但一般用!
      !function(形参列表){}(实参列表)
三种写法特点:
    1)能够将匿名函数与调用的()为一个整体,官方推荐使用;
    2)无法表明函数与之后的()的整体性,不推荐使用。
3)使用!开头,结构清晰,不容易混乱,推荐使用;
//方式1,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
alert(x+y);
return x+y;
}(3,4)); //方式2,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行(效果和方式一一样)
(function(x,y){
alert(x+y);
return x+y;
})(3,4);
//这种方式也是很多库爱用的调用方式,如jQuery,Mootools。//方式3,使用void
void function(x) {
x = x-1;
alert(x);
}(9);//方式4,使用-/+运算符
-function(x,y){
alert(x+y);
return x+y;
}(3,4);
+function(x,y){
alert(x+y);
return x+y;
}(3,4);
--function(x,y){
alert(x+y);
return x+y;
}(3,4);
++function(x,y){
alert(x+y);
return x+y;
}(3,4); //方式5,使用波浪符(~)
~function(x, y) {
alert(x+y);
return x+y;
}(3, 4); //方式6,匿名函数执行放在中括号内
[function(){
console.log(this) // 浏览器得控制台输出window
}(this)] //方式7,匿名函数前加typeof
typeof function(){
console.log(this) // 浏览器得控制台输出window
}(this) //方式8,匿名函数前加delete
delete function(){
console.log(this) // 浏览器得控制台输出window
}(this) 方式9,匿名函数前加void
void function(){
console.log(this) // 浏览器得控制台输出window
}(this) //方式10,使用new方式,传参
new function(win){
console.log(win) // window
}(this) //方式11,使用new,不传参
new function(){
console.log(this) // 这里的this就不是window了
} //方式12,逗号运算符//(逗号运算符的特性及作用:逗号运算符的作用是将若干表达式连接起来。它的优先级是所有运算符中最低的,结合方向是自左至右。)
function(){
console.log(this) // window
}(); //方式13,按位异或运算符
^function(){
console.log(this) // window
}(); //方式14,比较运算符
function(){
console.log(this) // window
}(); //最后看看错误的调用方式
function(x,y){
alert(x+y);
return x+y;
}(3,4);
/*匿名函数的N种写法如下所示
匿名函数没有实际名字,也没有指针,怎么执行?
关于匿名函数写法,很发散~
+号是让函数声明转换为函数表达式。汇总一下
最常见的用法:
代码如下:*/
(function() {
alert('water');
})();
/*当然也可以带参数:
代码如下:*/
(function(o) {
alert(o);
})('water');
/*想用匿名函数的链式调用?很简单:
代码如下:*/
(function(o) {
console.log(o);
return arguments.callee;
})('water')('down');
/*常见的匿名函数都知道了,看看不常见的:
代码如下:*/
~(function(){
alert('water');
})();//写法有点酷~
//代码如下:
void function(){
alert('water');
}();//据说效率最高~
//代码如下:
+function(){
alert('water');
}();
//代码如下:
-function(){
alert('water');
}();
//代码如下:
~function(){
alert('water');
}();//代码如下:
!function(){
alert('water');
}(); //代码如下:
(function(){
alert('water');
}());//有点强制执行的味道~

  2.函数定义和函数表达式

    1)函数定义 可以在定义前加括号执行,也可以在定义后加括号执行

      fn(1,2);
      function fn(x,y){
        alert(x+y);
        return x+y;
      }
      fn(3,4);

    结果弹出两次提示框,分别显示3和7。fn调用了两次;
    2)通过var 的函数,只能在后面运行   
      //fn(1,2);
      var fn = function(x,y){
        alert(x+y);
        return x+y;
      };
      fn(3,4);
    在var 之前的fn(1,2);不注掉,运行报错。注掉后弹出一次提示框,显示7。

  3.形参、实参和不定参

    1)实参:执行函数时 可以传递 (用已知的变量 / 具体的数据);

    2)形参:相当于函数局部的变量,命名规则和var相同;定义,无中生有

    var s = 5;fn(s);//实参
    function fn(x) {//形参// var x;
      alert(x)}

    //形参 / 实参都可以有多个,用 , 隔开sum(2,4);
    function sum(a,b) {alert(a+b)}    //实参和形参个数不一定非得一样,但是不一样的时候要注意一一对应的关系sum(1,2,3,4);
    function sum(a,b,c) {alert(a+b+c);}    //形参多了的话,没有对应的那些形参,值就是undefinedsum(1,2,3);
    function sum(a,b,c,d) {
      // var a,b,c,d;alert(a+b+c+d);alert(d);}sum(1,2,3);
    function sum(a,b,c,d) {
    // 给形参添加默认值a = a || 0;b = b || 0;c = c || 0;d = d || 0;alert(a+b+c+d);}

    3)不定参:arguments,存储着所有 实参 的集合

    注:无论有没有形参,实参都会被存在 不定参 里面

    sum(1,2,3,4,5,6,7,8,9);function sum() {alert(arguments.length);alert(arguments[8]);
      var x = 0;
      for(var i = 0 ,len = arguments.length; i < len; i ++){x += arguments[i];}alert(x);}    

  

  4.函数中return的作用

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;}#box{width: 200px;height: 200px;background: red;}.box{font-size: 18px;color: yellow;}</style>
</head>
<body><div id="box"></div><script>/*每个函数默认返回 return undefined*/var oBox = document.getElementById("box");function fn() {oBox.innerHTML = "hahahah";//过程// return "bear";//结果return oBox;}var x = fn();alert(x);fn();fn().className = "box";//效果相当于oBox.className = "box";
</script> </body> </html>

一、作用域

  javascript解析顺序
    1.(定义)先解析var function 参数
      a.该步骤的var只定义变量,后面的=赋值不解析
      b.该步骤的函数只定义函数,函数的执行不解析
      c.重名的只留一个,var 和函数重名  函数优先
    2.(执行)再从上至下执行其他代码
      作用域:
      作用:读写
      域:范围,区域
      解析:从上至下
        1 找 var 定义函数 参数
        2 执行
    例:下面代码的执行顺序如注视
        var a = 1;function fn( a ) {alert(2);a = 3;alert(a);}fn( a );alert( a );/*1 找a = und;==》a = 1;fn = function fn( a ) {// var a = 1;alert(2);a = 3;}2 执行a = 1;fn( a );=》fn(1)1 找a = und;==>a = 1;==>a = 3;2 执行a = 1;alert(2);==>2a = 3;alert( a ); ==>1*/                        

一、常用方法

  1.关于数字的方法  

    1)js的六大数据类型:
      number,string,boolean,function,undefined,object
    2)number数字方法
      在js里面的小数和整数统一都是数字,-2^53-2^53,超出范围之后精度就会不准确
      Number()——参数中必须能被转换成数字,否则返回NaN:
      parseInt(解析的参数)——将参数转换为数字,整数部分遇到不是数字就停
      parseFloat()——将参数转换为数字,不是数字就停,否则直到小数部分遇到不是数字就停
      Num.toFixed(n)——四舍五入保留n位小数
      NaN(Not a Number) NaN 不等于自己

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;}</style>
</head>
<body><script>var x = "hah";alert(typeof x);//stringalert(Number(x));//NaNalert(typeof Number(x));//numbervar x = "78.25";alert(parseInt(x));alert(typeof parseInt(x));alert(parseFloat(x));alert(typeof parseFloat(x));var x = 25.88254;alert(x.toFixed(3));</script>
</body>
</html>

  

  2.数学方法  

    Math 数学函数
      Math.pow(16, 2)——十六的平方 256
      Math.round(5.5)——四舍五入(整数)
      Math.ceil(0.2)——向上取整
      Math.floor(0.9)——向下取整
      Math.max()——取参数中最大的值
      Math.min()——取参数中最小的值
      Math.random()——0-1的随机数 (小数点后15位)
      Math.random()*m+n 生成 n ~ (m+n)之间的数
      Math.PI——π=3.141592653589793  
      Math.abs()——求绝对值

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;}</style>
</head>
<body><script>alert(Math.pow(3,4));alert(Math.round(25.99));alert(Math.ceil(0.1));alert(Math.floor(0.99));var x = Math.max(12,0,2,-5);var y = Math.min(12,0,2,-5);alert(x);alert(y);alert(Math.random());//[0,1)alert(Math.random()*20 + 10);alert(Math.PI);alert(Math.abs(-10));</script>
</body>
</html>    

转载于:https://www.cnblogs.com/bear905695019/p/8339271.html

Web-Lesson07-JS的函数及作用域相关推荐

  1. js 匿名函数_javascript:函数的使用

    大家好,我是专注于前端开发,前端入门,精神可爱的前端小学妹,本期为大家带来的Web前端学习知识是"javascript:函数的使用",喜欢Web前端的朋友,一起看看吧! 主要内容: ...

  2. web前端-JS(DOM、BOM)

    web前端-JS(DOM.BOM) 1. DOM- 操作元素 1.1 获取元素 1.2 事件基础 1.3 操作元素 1.3.1 改变元素的内容 1.3.2 常见元素的属性操作 1.3.3 表单元素的属 ...

  3. web前端-JS入门

    web前端-JS入门 1.初识JavaScript 1.1 JavaScript的简单介绍 1.2 JS的三种写法 1.2.1 行内式 1.2.2 内嵌式 1.2.3 外部js 1.3 JS输入输出语 ...

  4. js变量以及其作用域详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量 ...

  5. JS基础篇之作用域、执行上下文、this、闭包

    前言:JS 的作用域.执行上下文.this.闭包是老生常谈的话题,也是新手比较懵懂的知识点.当然即便你作为老手,也未必真的能理解透彻这些概念. 一.作用域和执行上下文 作用域: js中的作用域是词法作 ...

  6. web前端教程之JavaScript的作用域

    作为一个前端工程师,你必须对JavaScript的作用域不陌生,传统常见的有函数级作用域,还有全局作用域,ES6 let const 的块级作用域,其实还有一个你不知道的块级作用域,今天小千就来给大家 ...

  7. js箭头函数和普通函数区别

    js箭头函数和普通函数区别 实验环境:nodejs v12.16.1 箭头函数不能作为构造函数,而普通函数可以 箭头函数没有原型,而普通函数有 箭头函数return可以省略语句块.(如果=>右边 ...

  8. 相学java_从这两套题,重新认识JS的this、作用域、闭包、对象

    日常开发中,我们经常用到this.例如用Jquery绑定事件时,this指向触发事件的DOM元素:编写Vue.React组件时,this指向组件本身.对于新手来说,常会用一种意会的感觉去判断this的 ...

  9. 函数的作用域以及预编译

    一.函数的作用域 函数作用域有点像单面镜(外面看不到里面,里面可以看到外面) JS的特点:单线程.是 解释性语言 (翻译一行,执行一行) 二.预解析 JS预解析三部曲:语法解析 ⇒ 预编译 ⇒ 解释执 ...

  10. js 闭包函数 构造函数_JavaScript中的闭包,库里函数和酷抽象

    js 闭包函数 构造函数 In this article, we will talk about closures and curried functions and we'll play aroun ...

最新文章

  1. Tomcat配置server.xml
  2. JAXB--@XmlElementWrapper注解和泛型一起使用
  3. android屏幕底部黑块,Android surfaceView 黑块问题
  4. 设置linux英文环境,英文Linux里中文和日文用户环境设置
  5. 主板24pin接口详图_【图解】主板连线接口最详尽图文解释
  6. linux c select函数使用求解释
  7. 8条体面的程序员偷懒技巧
  8. (best!)JAVA中文字符编码问题详解
  9. FFmpeg源代码简单分析:libswscale的sws_getContext()
  10. Java二分查找代码
  11. 2016年全国房价会呈什么趋势?
  12. Mac上制作Linux U盘启动盘
  13. 不知如何选股?不知哪种指标策略可靠?量化分析比较DMA、DMI、MACD、KDJ、BOLL指标策略收益情况
  14. php v8js 执行外部js,php运行jsv8引擎
  15. 解决fatal: could not get a repository handle
  16. HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER开机启动程序的区别
  17. idea 2020.3更新后如何实现run parallel
  18. 地图开发技术报告(百度地图)
  19. 成为一名优秀的架构师需要哪些条件?
  20. SQL中的笛卡尔你真的懂吗?

热门文章

  1. Autodesk Cloud Accelerator Program 开始报名
  2. UIScrollView 的代理方法简单注解
  3. iOS ASIHttpRequest 封装
  4. ADO.NET知识学习总结
  5. 诺基亚Lumia 800生产背后的故事——萨罗工厂[多图]
  6. 洛谷P1280 caioj 1085 动态规划入门(非常规DP9:尼克的任务)
  7. WKWebview 的使用及坑
  8. 使用cpanel后台的“时钟守护作业”功能完成空间的定时全备份
  9. Symfony3实现刷新登录时间
  10. MySQL5.7号称永久解决了复制延迟问题的并行复制