js函数的length属性就是方法预期传入的参数个数吗?

 如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿。当然,如今有着许多的框架,都有相对应的前后台数据交互的方法。

而,其中,用得最多的应该苏算是JQuery的Ajax了。但是,今天,影子向大家介绍的是原生js的Ajax,及跨域请求。

首先,先回忆下JQuery的Ajax写法:

// 第二步: 设置状态监听函数 // 第四步: send一个请求。 可以发送对象和字符串,不需要传递数据发送null

  method:发送请求所使用的方法(GET或POST);与POST相比,GET更简单也更快,并且在大部分情况下都能用;然而,在以下情况中,请使用POST请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

 url:规定服务器端脚本的 URL(该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务));

 async:规定应当对请求进行异步(true)或同步(false)处理;true是在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理;false是等待服务器响应再执行。

2. send() 方法可将请求送往服务器。

4. readyState:存有服务器响应的状态信息。

  • 1: 服务器连接已建立
  • 4: 请求已完成,且响应已就绪

另外,给大家介绍两种解析字符串的方法:

  纯粹的将JSON字符串解析为数组或对象;

首先,我们得知道 为什么会有跨域请求这回事,以及什么情况下会有跨域请求?

同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。

  一段脚本向后台请求数据,只能读取属于同一协议名、同一主机名、同一端口号下的数据;

  所以,请求不同协议名、不同端口号、不同主机名下面的文件时,

方法一:后台PHP进行设置

前台无需任何设置,在后台被请求的PHP文件中,写入一条header

   --- 表示允许哪些域名请求这个PHP文件,*表示所有域名都允许

  其中,url为PHP文件的路径;

    1、原有src属性的标签子带跨域功能;所以可以使用script标签的src属性请求后台数据

      2、用于src在加载数据成功后,会直接将加载的内容放到script标签中;

         所以,后台直接返回JSON字符串将不能在script标签中解析。

         因此,后台应该返回给前台一个回调函数名,并将JSON字符串作为参数传入。

       3、前台接收到返回的回调函数,将直接在script标签中调用。因此,需要声明这样一个回调函数,作为请求成功的回调

            

            

            

       2、后台返回时,依然需要返回回调函数名,但是,ajax在发送请求时,会默认使用get请求将回调函数名发给后台,

PHP文件:         

当然,后台也可以随便返回一个函数名,前台只要请求成功,就会自动调用这个函数。类似第二条的②、③步,而不需要本方法的第③步

虽然,影子是一名web前端工程师,但是,影子中的觉得关于数据交互这一块,对我们这一群人来说,要用的地方还是,比较多的;况且,就算是用不到,多一技傍身也是,不错的;

好了,今天,影子的分享,就到这里结束了,感谢大家的支持!!!!

函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。

上式的 x 就是square函数的 参数。每次运行的时候,需要提供这个值,否则得不到结果。

二、形式参数和实际参数

2.1 形式参数在函数定义时列出。

2.2 实际参数在函数调用时传递给函数真正的

形式参数和实际参数是不同的变量,他们在内存中处于不同的位置,形式参数在函数运行结束时将被释放。

3.1 函数定义时形式参数没有指定数据类型。

3.2 函数对实际参数没有进行类型检测。

3.3 函数对实际参数的个数没有进行检测。

如果函数在调用时未提供实际参数,参数会默认设置为: undefined

(1)当调用函数时传递的实参比函数定义时的形参个数少,剩下的形参都将设置为 undefined 值。

(2)通常函数只保留靠前的参数,而省略靠后的参数。如果一定要省略靠前的参数,只有显式传入 undefined

(1)如果函数调用时设置了过多的实际参数,剩下的实际参数没有方法直接获取,需要使用即将提到的arguments对象。

(1)由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。

(2)arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。

(1)通过arguments对象的length属性,可以判断函数调用时传递的实际参数个数

arguments对象的length属性显示实参的个数,函数的length属性显示形参的个数

(3)形参只是提供便利,但不是必需的

(1)需要注意的是,虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。

(2)如果要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组

(3)下面是两种常用的转换方法:slice方法逐一填入新数组

(1)arguments对象有一个名为callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

(2)下面是经典的阶乘函数

(3) 但是,上面这个函数的执行与函数名紧紧耦合在了一起,可以使用arguments.callee可以消除函数解耦

(4) 但在严格模式下,访问这个属性会抛出TypeError错误

(5)这时,可以使用具名的函数表达式

利用函数体中一个名为 arguments 的内部对象来实现。

这个对象就如同一个类似于数组的对象一样,包括了所有被传入的参数,使它可以接收任意个数的参数:

我要回帖

更多关于 函数传递参数有哪些方式 的文章

 

随机推荐