————————————————————————————————————————————

变量

  • 全局变量:在函数体外声明,全局可以使用
  • 局部变量:通过关键字var来声明

变量类型

     <script type="text/javascript">
var a;
// 十进制
a = 1;
a = 1.2;
a = -23;
a = .23e4;
a = 3e-2;
// 十六进制
a = 0xABCDE;
a = 0Xff;
// 八进制
a = 0123;
a = 01234567;
// 正负无穷大
a = 1.79e310;
a = -1.79e310;
// NaN:不是一个数字
// p.s.NaN不能和自身比较,NaN!=NaN
a = 0 / 0;
// alert(a);
// alert(isNaN(a));
var str1 = "hello";
var str2 = "world";
var str = str1 + str2;
// 转义字符,如果定界符用',内部是可以用"的
var strCh = 'a\nb\rc\t"d\\';
// alert(strCh);
// 赋不存在的值
var emptyValue;
// alert(emptyValue);
// 赋空置
var nullValue = null;
alert(nullValue);
</script>

在内存中的存储与释放(无用存储单元)

  • 收集方式:自动进行收集,可以创建任何需要的无用对象,系统会自动进行清除
  • 收集内容:收集器确定安全回收内存单元的时机,回收那些不再会被使用的值
  • 回收算法:标记和清除无用存储单元的回收算法,通过回收器周期性遍历所有变量并且给变量所引用的值做标记,如果被引用的值是对象或数组,那么会以递归的形式做标记,如果值是数或图,回收器会找到对应的值。如果没有找到对应的值,则通过回收算法来回收。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

引用JS

     <!DOCTYPE html>
<html> <head>
<!-- 调用外部文件 -->
<script type="text/javascript" src="./test.js"></script>
<!-- 使用代码屏蔽 -->
<script type="text/javascript">
<!--
alert("浏览器支持js,如果不支持则不显示该内容");
// 向控制台书写内容
console.log("hello");
//-->
</script>
<!-- 在浏览器不支持js时显示该行字 -->
<noscript>
您的浏览器不支持js,建议更换高版本的浏览器以保证您的用户体验
</noscript>
</head> <body>
<!-- 写在href中的js -->
<p><a href="javascript:confirm('您确定么?')">报名</a></p>
<!-- 写在onclick中的js -->
<p onclick="javascript:alert('onclick')">点击</p>
</body> </html>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

隐式转换

显式转换

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数调用的arguments的方法

     <script type="text/javascript">
// arguments数据类型是一个数组,可以得到我们传入的参数
function calc(x, y) {
alert(arguments[0]);
alert(arguments[1]);
alert(typeof arguments);
}
// alert(1, 2); // 通过arguments.length获取参数的个数
// 在这里调用的实参有5个,函数形参有4个,自动忽略一个,但arguments.lenth为5
// 通过arguments实现可变参数
function test(a, b, c, d) {
arguments[2] = 100;
var paramsNum = arguments.length;
var sum = 0;
for (var i = arguments.length - 1; i >= 0; i--) {
sum += arguments[i];
}
alert(sum);
}
test(1, 2, 3, 4, 5, 6);
</script>

————————————————————————————————————————————

函数

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

全局函数:见手册

  • 代码样例
     <script type="text/javascript">
/***********************************
* encodeURI()
* decodeURI()
* encodeURIComponent()
* decodeURIComponent()
***********************************/
// encodeURIComponent 在转义时会将整个URI中的所有标点符号都转义,包括分隔符/
var str = "http://www.hughdong.com/Hugh Dong,/";
document.write(encodeURI(str) + "</br>");
document.write(encodeURIComponent(str) + "</br>");
// decodeURI 无法完全解开encodeURIComponent的编码,需要对应decodeURIComponent来就解码
document.write(decodeURI(encodeURIComponent(str)) + "</br>");
document.write(decodeURIComponent(encodeURIComponent(str)) + "</br>");
document.write("<hr>")
/***********************************
* escape()
* unescape()
***********************************/
// 对字符进行转义
str = "(?!=()#%&))";
document.write(escape(str) + "</br>");
document.write(unescape(escape(str)) + "</br>");
document.write("<hr>")
/***********************************
* eval()
***********************************/
// 计算某个字符串,并执行其中的JavaScript代码
eval("document.write('eval() is called')");
document.write("<hr>")
/***********************************
* getClass(javaobj)
* 未理解,略
***********************************/
document.write("<hr>")
/***********************************
* isFinite()
* isNan()
***********************************/
// isFinite 判断不是无穷大时true
document.write(isFinite(1.79e390) + "</br>")
document.write(isFinite(-1.79e390) + "</br>")
document.write(isFinite(2) + "</br>")
// isNaN 判断不是数字时true
document.write(isNaN("hello") + "</br>")
document.write(isNaN(1.79e390) + "</br>")
document.write("<hr>")
/***********************************
* Number()
* parseFloat()
* parseInt()
* String
* 数据类型转换,略
***********************************/
document.write("<hr>")
</script>
  • 实现效果

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

匿名函数:没有函数名的函数

  • 函数表达式可以存储在变量中,变量也可以作为一个函数使用
  • 可以将匿名函数作为参数传递给其他函数,接收方函数就可以通过所传递进来的函数完成某些功能
  • 可以通过匿名函数来执行某些一次性的任务

回调函数:将函数的返回值作为参数调用来实现功能

  • 回调函数调用的函数
    • call()
    • apply()
  • 可以让我们在不做命名的情况下传递参数,这样可以节省全局变量
  • 我们可以讲一个函数调用操作委托给另一个函数,节省代码编写
  • 有助于提升性能

自调函数:不需要调用,自动执行的函数

  • 使用自调函数不会产生任何全局变量
  • 函数无法重复执行,适合执行一些一次性或初始化的任务

内部(私有)函数

  • 确保全局名字空间的纯净性,防止命名出现冲突
  • 只将一些必要的函数暴露给外部,并保留属于自己的函数,使其不被其他应用程序所调用

返回函数的函数

闭包(作用域链)

 var Test = function Calc(a, b)
{
return a + b;
}
document.write(Test(1, 2) + "</br>");
var Test1 = Test;
document.write(Test1(1, 2) + "</br>");
/*******************************
* 匿名函数,没有函数名
*******************************/
var Test2 = function (x, y)
{
return x * y;
}
var Test3 = Test2;
document.write(Test2(3, 4) + "</br>");
document.write(Test3(4, 5) + "</br>");
/*******************************
* 回调函数(匿名函数的应用)
*******************************/
// Demo1
// 通过Calc2调用T1和T2函数
function Calc2(x, y)
{
return x() + y();
}
function T1()
{
return 5;
}
function T2()
{
return 6;
}
document.write(Calc2(T1, T2) + "</br>");
// Demo2
// 调用Func1,在for循环中将abc的值先*2传入CallBack函数AddOne,将返回值存入arr数组并打印
function Func1(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
function AddOne(num)
{
return num + 1;
}
document.write(Func1(3, 4, 5, AddOne) + "</br>");
// Demo3
// 或者使用匿名函数作为回调函数,同Demo2
function Func2(a, b, c, CallBack)
{
var i,
arr = [];
for (i = 0; i < 3; i++)
{
arr[i] = CallBack(arguments[i] * 2);
}
return arr;
}
document.write(Func2(5, 6, 7, function (a)
{
return a + 1
}
) + "</br>");
// Demo4
// 使用系统的call()方法
function Func4(a, b, c)
{
return a * b * c;
}
document.write(Func4.call(this, 2, 2, 2) + "</br>");
// Demo5
// apply()方法
function Func5(a, b, c)
{
return a + b + c;
}
var params = [4, 5, 9]
document.write(Func5.apply(this, params) + "</br>");
/*******************************
* 自调函数
*******************************/
(function (a, b)
{
document.write("函数自调用" + a + b);
}
)(3, 5); // 内部私有函数
// 在内部封装不想让外部使用的代码
function a(param)
{
function b(param1)
{
return param1 + 10;
}
// 在a函数体内调用b函数
return b(param);
}
// 在a函数体外不能直接调用b函数
console.log(a(5)); // 返回函数的函数
function c()
{
console.log('111');
return function ()
{
console.log('222');
}
}
// 在这里不可以直接调用c(),需要声明变量funcTest,让c()的返回值返回给funcTest
var funcTest = c();
funcTest();
// 或使用另一种形式c()();
c()(); // 重写自己的函数,用新的函数覆盖自己
function d()
{
console.log('333');
d = function ()
{
console.log('444');
}
}
// 在d函数内将新的函数内容赋给自己,第一次调用时为333并将自己重写自己的函数
console.log(d);
d();
console.log(d);
d(); // 针对不同的浏览器执行不同的代码
var e = function ()
{
function setUp()
{
console.log('setup');
} function doWhat()
{
console.log('dowhat');
}
setUp();
return doWhat;
}
();
// 打印e()代码段可以看到e的内容是doWhat(),在function(){}()末尾的()代表执行,e得到了function()返回的doWhat
console.log(e);
e();

JavaScript | 基础(变量/引用/转换/函数)的更多相关文章

  1. JavaScript基础:字符串转换函数——String()和toString()

    1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script>   var str = false ...

  2. php引用(&)变量引用,函数引用,对象引用和参数引用用法

    php引用(&)变量引用,函数引用,对象引用和参数引用用法   php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语 ...

  3. JavaScript 基础 (变量声明, 数据类型, 控制语句)

    创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...

  4. 前端知识体系:JavaScript基础-变量和类型

    前端工程师自检清单 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用.可手动实现一个简单的 Symbo 4. ...

  5. 【javascript基础】2、函数

    前言 我在上一篇[javascript基础]基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心高兴,刚开始发布的时候我一直盯着阅读人数,虽然知道 ...

  6. JavaScript基础——变量、语句、注释

    一.变量的命名规则 1.变量名由数字.字母.下划线组成 2.变量名的首字母不能是数字,只能是字母或者下划线 3.不能使用关键字和保留字作为变量名 4.变量严格区分大小写,例如在JavaScript中o ...

  7. JavaScript:变量提升和函数提升

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...

  8. 【javaScript基础】马上调用函数表达式

    在javaScript中,每一个函数被调用时,都会创建一个新的运行上下文.由于在一个函数里面定义的变量和函数仅仅能在里面訪问.在外面是不行的.上下文提供了一种非常easy的方法来创建私有性. //ma ...

  9. JavaScript基础内容中的函数详解

    函数 函数:即方法 函数就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值. 为什么使用函数: 1.方便调用 2.代码重用,利于维护 3.便于修改,便于重构 4.简化逻辑,利 ...

随机推荐

  1. HSV做通道分离是出现的Vector内存越界错误

    vector<Mat> hsvSplit; //因为我们读取的是彩色图,直方图均衡化需要在HSV空间做 split(imgHSV, hsvSplit); equalizeHist(hsvS ...

  2. CF 999B. Reversing Encryption【模拟/string reverse】

    [链接]:CF [代码]: #include<bits/stdc++.h> #define PI acos(-1.0) #define pb push_back #define F fir ...

  3. 回溯法练习【BFS/DFS】

    1.N皇后问题 2.油田问题 3.素数环问题 4.马踏棋盘问题 5.图的m着色问题 6.01背包问题 7.TSP问题 [Code-1:输出N皇后方案和个数] #include<bits/stdc ...

  4. JavaScript代码放在head和body的区别(QRCode生成)

    1.在head中时,所代表的functions只加载而不执行,执行是在某一事件触发后才开始. 2.在body中时,直接加载并执行 典型的区别: 如果有不在函数中的执行语句,比如变量初始化,如果在hea ...

  5. Codeforces #442 Div2 F

    #442 Div2 F 题意 给出一些包含两种类型(a, b)问题的问题册,每本问题册有一些题目,每次查询某一区间,问有多少子区间中 a 问题的数量等于 b 问题的数量加 \(k\) . 分析 令包含 ...

  6. [BZOJ 2342] 双倍回文

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2342 Algorithm: 解决回文串问题,一般从对称轴下手. 肯定先跑一边Manach ...

  7. 【数论】【素数判定】CODEVS 2851 菜菜买气球

    素数判定模板. #include<cstdio> #include<map> using namespace std; ],ans=-,l,r,n,sum[]; bool is ...

  8. 1.1(Mybatis学习笔记)初识Mybatis

    一.Mybatis下载与使用 下载地址:https://github.com/mybatis/mybatis-3/releases 下载后解压目录: 需要将lib下的jar包和mybatid-x-x- ...

  9. 1.2(Spring MVC学习笔记) Spring MVC核心类及注解

    一.DispatcherServlet DispatcherServlet在程序中充当着前端控制器的作用,使用时只需在web.xml下配置即可. 配置格式如下: <?xml version=&q ...

  10. XAMPP 下apache部署网站,多个虚拟机(空间)配置

    1.首先修改C盘WINDOWS/system32/drivers/etc目录下的 hosts 文件,用记事本打开,加入: 127.0.0.1 www.a.com 127.0.0.1 www.b.com ...